diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json new file mode 100644 index 00000000..d009f4ec --- /dev/null +++ b/dev/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-27T04:22:06","documenter_version":"1.5.0"}} \ No newline at end of file diff --git a/dev/about/index.html b/dev/about/index.html new file mode 100644 index 00000000..4d22a148 --- /dev/null +++ b/dev/about/index.html @@ -0,0 +1,4 @@ + +About · MathematicalSystems.jl

About

This page contains some general information about this project, and recommendations about contributing.

Contributing

If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

Branches and pull requests (PR)

We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

Unit testing and continuous integration (CI)

This project is synchronized with GitHub Actions such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to make all unit tests pass.

To run the unit tests locally, you can do:

julia> using Pkg
+
+julia> Pkg.test("MathematicalSystems")

We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

Contributing to the documentation

New functions and types should be documented according to our guidelines directly in the source code.

You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

julia> ?LinearContinuousSystem

This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

$ julia --color=yes docs/make.jl

Note that this also runs all doctests which will take some time.

This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

Below we list more related projects.

Package nameDescription
HybridSystems.jlHybrid Systems definitions in Julia.
LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
ControlToolbox.jlAnalysis and design tools for control systems.
ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
ControlSystems.jlA Control Systems Toolbox for Julia
ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

Credits

These persons have contributed to MathematicalSystems.jl (in alphabetic order):

diff --git a/dev/assets/aligned.css b/dev/assets/aligned.css new file mode 100644 index 00000000..0078e6bb --- /dev/null +++ b/dev/assets/aligned.css @@ -0,0 +1,3 @@ +p { + text-align: justify +} diff --git a/dev/assets/documenter.js b/dev/assets/documenter.js new file mode 100644 index 00000000..b2bdd43e --- /dev/null +++ b/dev/assets/documenter.js @@ -0,0 +1,1059 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function (event) { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + let animationSpeed = event.noToggleAnimation ? 0 : 400; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(animationSpeed); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(animationSpeed); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); + + if (meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + noToggleAnimation: true, + }); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + + word = word.toLowerCase(); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * RegX escape function from MDN + * Refer: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
`; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + searchstring = escapeRegExp(querystring); + let textindex = new RegExp(`${searchstring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(searchstring)}`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
+
${escape(result.title)}
+
${result.category}
+
+

+ ${display_result} +

+
+ ${display_link} +
+
+ ${search_divider} + `; + + return result_div; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + combineWith: "AND", + }); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! +const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), +]; +const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; +const worker_blob = new Blob([worker_str], { type: "text/javascript" }); +const worker = new Worker(URL.createObjectURL(worker_blob)); + +/////// SEARCH MAIN /////// + +// Whether the worker is currently handling a search. This is a boolean +// as the worker only ever handles 1 or 0 searches at a time. +var worker_is_running = false; + +// The last search text that was sent to the worker. This is used to determine +// if the worker should be launched again when it reports back results. +var last_search_text = ""; + +// The results of the last search. This, in combination with the state of the filters +// in the DOM, is used compute the results to display on calls to update_search. +var unfiltered_results = []; + +// Which filter is currently selected +var selected_filter = ""; + +$(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } +}); + +function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); +} + +worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } + + unfiltered_results = e.data; + update_search(); +}; + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; + } else { + selected_filter = $(this).text().toLowerCase(); + } + + // This updates search results and toggles classes for UI: + update_search(); +}); + +/** + * Make/Update the search component + */ +function update_search() { + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } + + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
`; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
${count_str}
`; + + search_result_container = ` +
+ ${modal_filters} + ${search_divider} + ${result_count} +
+ ${search_results} +
+
+ `; + } else { + search_result_container = ` +
+ ${modal_filters} + ${search_divider} +
0 result(s)
+
+
No result found!
+ `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
Type something to get started!
+ `); + } +} + +/** + * Make the modal filter html + * + * @returns string + */ +function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
+ Filters: + ${str} +
`; +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let search_modal_header = ` + + `; + + let initial_search_body = ` +
Type something to get started!
+ `; + + let search_modal_footer = ` + + `; + + $(document.body).append( + ` + + ` + ); + + document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); + }); + + document + .querySelector(".close-search-modal") + .addEventListener("click", () => { + closeModal(); + }); + + $(document).on("click", ".search-result-link", function () { + closeModal(); + }); + + document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; + }); + + // Functions to open and close a modal + function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); + } + + function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
Type something to get started!
+ `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); + } + + document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/dev/assets/logo.png b/dev/assets/logo.png new file mode 100644 index 00000000..b2a163b0 Binary files /dev/null and b/dev/assets/logo.png differ diff --git a/dev/assets/themes/catppuccin-frappe.css b/dev/assets/themes/catppuccin-frappe.css new file mode 100644 index 00000000..54a5b77e --- /dev/null +++ b/dev/assets/themes/catppuccin-frappe.css @@ -0,0 +1 @@ +html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe .file-name,html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-frappe .pagination-previous:focus,html.theme--catppuccin-frappe .pagination-next:focus,html.theme--catppuccin-frappe .pagination-link:focus,html.theme--catppuccin-frappe .pagination-ellipsis:focus,html.theme--catppuccin-frappe .file-cta:focus,html.theme--catppuccin-frappe .file-name:focus,html.theme--catppuccin-frappe .select select:focus,html.theme--catppuccin-frappe .textarea:focus,html.theme--catppuccin-frappe .input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-frappe .button:focus,html.theme--catppuccin-frappe .is-focused.pagination-previous,html.theme--catppuccin-frappe .is-focused.pagination-next,html.theme--catppuccin-frappe .is-focused.pagination-link,html.theme--catppuccin-frappe .is-focused.pagination-ellipsis,html.theme--catppuccin-frappe .is-focused.file-cta,html.theme--catppuccin-frappe .is-focused.file-name,html.theme--catppuccin-frappe .select select.is-focused,html.theme--catppuccin-frappe .is-focused.textarea,html.theme--catppuccin-frappe .is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-focused.button,html.theme--catppuccin-frappe .pagination-previous:active,html.theme--catppuccin-frappe .pagination-next:active,html.theme--catppuccin-frappe .pagination-link:active,html.theme--catppuccin-frappe .pagination-ellipsis:active,html.theme--catppuccin-frappe .file-cta:active,html.theme--catppuccin-frappe .file-name:active,html.theme--catppuccin-frappe .select select:active,html.theme--catppuccin-frappe .textarea:active,html.theme--catppuccin-frappe .input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-frappe .button:active,html.theme--catppuccin-frappe .is-active.pagination-previous,html.theme--catppuccin-frappe .is-active.pagination-next,html.theme--catppuccin-frappe .is-active.pagination-link,html.theme--catppuccin-frappe .is-active.pagination-ellipsis,html.theme--catppuccin-frappe .is-active.file-cta,html.theme--catppuccin-frappe .is-active.file-name,html.theme--catppuccin-frappe .select select.is-active,html.theme--catppuccin-frappe .is-active.textarea,html.theme--catppuccin-frappe .is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .is-active.button{outline:none}html.theme--catppuccin-frappe .pagination-previous[disabled],html.theme--catppuccin-frappe .pagination-next[disabled],html.theme--catppuccin-frappe .pagination-link[disabled],html.theme--catppuccin-frappe .pagination-ellipsis[disabled],html.theme--catppuccin-frappe .file-cta[disabled],html.theme--catppuccin-frappe .file-name[disabled],html.theme--catppuccin-frappe .select select[disabled],html.theme--catppuccin-frappe .textarea[disabled],html.theme--catppuccin-frappe .input[disabled],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-frappe .button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-frappe .file-name,html.theme--catppuccin-frappe fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-frappe .select select,fieldset[disabled] html.theme--catppuccin-frappe .textarea,fieldset[disabled] html.theme--catppuccin-frappe .input,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe fieldset[disabled] .select select,html.theme--catppuccin-frappe .select fieldset[disabled] select,html.theme--catppuccin-frappe fieldset[disabled] .textarea,html.theme--catppuccin-frappe fieldset[disabled] .input,html.theme--catppuccin-frappe fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-frappe .button,html.theme--catppuccin-frappe fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-frappe .tabs,html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .breadcrumb,html.theme--catppuccin-frappe .file,html.theme--catppuccin-frappe .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-frappe .admonition:not(:last-child),html.theme--catppuccin-frappe .tabs:not(:last-child),html.theme--catppuccin-frappe .pagination:not(:last-child),html.theme--catppuccin-frappe .message:not(:last-child),html.theme--catppuccin-frappe .level:not(:last-child),html.theme--catppuccin-frappe .breadcrumb:not(:last-child),html.theme--catppuccin-frappe .block:not(:last-child),html.theme--catppuccin-frappe .title:not(:last-child),html.theme--catppuccin-frappe .subtitle:not(:last-child),html.theme--catppuccin-frappe .table-container:not(:last-child),html.theme--catppuccin-frappe .table:not(:last-child),html.theme--catppuccin-frappe .progress:not(:last-child),html.theme--catppuccin-frappe .notification:not(:last-child),html.theme--catppuccin-frappe .content:not(:last-child),html.theme--catppuccin-frappe .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .modal-close,html.theme--catppuccin-frappe .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-frappe .modal-close::before,html.theme--catppuccin-frappe .delete::before,html.theme--catppuccin-frappe .modal-close::after,html.theme--catppuccin-frappe .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-frappe .modal-close::before,html.theme--catppuccin-frappe .delete::before{height:2px;width:50%}html.theme--catppuccin-frappe .modal-close::after,html.theme--catppuccin-frappe .delete::after{height:50%;width:2px}html.theme--catppuccin-frappe .modal-close:hover,html.theme--catppuccin-frappe .delete:hover,html.theme--catppuccin-frappe .modal-close:focus,html.theme--catppuccin-frappe .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-frappe .modal-close:active,html.theme--catppuccin-frappe .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-frappe .is-small.modal-close,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-frappe .is-small.delete,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-frappe .is-medium.modal-close,html.theme--catppuccin-frappe .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-frappe .is-large.modal-close,html.theme--catppuccin-frappe .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-frappe .control.is-loading::after,html.theme--catppuccin-frappe .select.is-loading::after,html.theme--catppuccin-frappe .loader,html.theme--catppuccin-frappe .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #838ba7;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-frappe .hero-video,html.theme--catppuccin-frappe .modal-background,html.theme--catppuccin-frappe .modal,html.theme--catppuccin-frappe .image.is-square img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-frappe .image.is-square .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-frappe .image.is-1by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-frappe .image.is-1by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-frappe .image.is-5by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-frappe .image.is-5by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-frappe .image.is-4by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-frappe .image.is-4by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-frappe .image.is-3by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-frappe .image.is-5by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-frappe .image.is-5by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-frappe .image.is-16by9 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-frappe .image.is-16by9 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-frappe .image.is-2by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-frappe .image.is-2by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-frappe .image.is-3by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-frappe .image.is-3by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-frappe .image.is-4by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-frappe .image.is-4by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-frappe .image.is-3by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-frappe .image.is-3by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-frappe .image.is-2by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-frappe .image.is-2by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-frappe .image.is-3by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-frappe .image.is-9by16 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-frappe .image.is-9by16 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-frappe .image.is-1by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-frappe .image.is-1by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-frappe .image.is-1by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-frappe .image.is-1by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-frappe .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#414559 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#2b2e3c !important}.has-background-dark{background-color:#414559 !important}.has-text-primary{color:#8caaee !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#6089e7 !important}.has-background-primary{background-color:#8caaee !important}.has-text-primary-light{color:#edf2fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c1d1f6 !important}.has-background-primary-light{background-color:#edf2fc !important}.has-text-primary-dark{color:#153a8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#1c4cbb !important}.has-background-primary-dark{background-color:#153a8e !important}.has-text-link{color:#8caaee !important}a.has-text-link:hover,a.has-text-link:focus{color:#6089e7 !important}.has-background-link{background-color:#8caaee !important}.has-text-link-light{color:#edf2fc !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c1d1f6 !important}.has-background-link-light{background-color:#edf2fc !important}.has-text-link-dark{color:#153a8e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1c4cbb !important}.has-background-link-dark{background-color:#153a8e !important}.has-text-info{color:#81c8be !important}a.has-text-info:hover,a.has-text-info:focus{color:#5db9ac !important}.has-background-info{background-color:#81c8be !important}.has-text-info-light{color:#f1f9f8 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#cde9e5 !important}.has-background-info-light{background-color:#f1f9f8 !important}.has-text-info-dark{color:#2d675f !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#3c8a7f !important}.has-background-info-dark{background-color:#2d675f !important}.has-text-success{color:#a6d189 !important}a.has-text-success:hover,a.has-text-success:focus{color:#8ac364 !important}.has-background-success{background-color:#a6d189 !important}.has-text-success-light{color:#f4f9f0 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#d8ebcc !important}.has-background-success-light{background-color:#f4f9f0 !important}.has-text-success-dark{color:#446a29 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#5b8f38 !important}.has-background-success-dark{background-color:#446a29 !important}.has-text-warning{color:#e5c890 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#dbb467 !important}.has-background-warning{background-color:#e5c890 !important}.has-text-warning-light{color:#fbf7ee !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f1e2c5 !important}.has-background-warning-light{background-color:#fbf7ee !important}.has-text-warning-dark{color:#78591c !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#a17726 !important}.has-background-warning-dark{background-color:#78591c !important}.has-text-danger{color:#e78284 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#df575a !important}.has-background-danger{background-color:#e78284 !important}.has-text-danger-light{color:#fceeee !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f3c3c4 !important}.has-background-danger-light{background-color:#fceeee !important}.has-text-danger-dark{color:#9a1e20 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c52629 !important}.has-background-danger-dark{background-color:#9a1e20 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#414559 !important}.has-background-grey-darker{background-color:#414559 !important}.has-text-grey-dark{color:#51576d !important}.has-background-grey-dark{background-color:#51576d !important}.has-text-grey{color:#626880 !important}.has-background-grey{background-color:#626880 !important}.has-text-grey-light{color:#737994 !important}.has-background-grey-light{background-color:#737994 !important}.has-text-grey-lighter{color:#838ba7 !important}.has-background-grey-lighter{background-color:#838ba7 !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--catppuccin-frappe html{background-color:#303446;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-frappe article,html.theme--catppuccin-frappe aside,html.theme--catppuccin-frappe figure,html.theme--catppuccin-frappe footer,html.theme--catppuccin-frappe header,html.theme--catppuccin-frappe hgroup,html.theme--catppuccin-frappe section{display:block}html.theme--catppuccin-frappe body,html.theme--catppuccin-frappe button,html.theme--catppuccin-frappe input,html.theme--catppuccin-frappe optgroup,html.theme--catppuccin-frappe select,html.theme--catppuccin-frappe textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-frappe code,html.theme--catppuccin-frappe pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-frappe body{color:#c6d0f5;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-frappe a{color:#8caaee;cursor:pointer;text-decoration:none}html.theme--catppuccin-frappe a strong{color:currentColor}html.theme--catppuccin-frappe a:hover{color:#99d1db}html.theme--catppuccin-frappe code{background-color:#292c3c;color:#c6d0f5;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-frappe hr{background-color:#292c3c;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-frappe img{height:auto;max-width:100%}html.theme--catppuccin-frappe input[type="checkbox"],html.theme--catppuccin-frappe input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-frappe small{font-size:.875em}html.theme--catppuccin-frappe span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-frappe strong{color:#b0bef1;font-weight:700}html.theme--catppuccin-frappe fieldset{border:none}html.theme--catppuccin-frappe pre{-webkit-overflow-scrolling:touch;background-color:#292c3c;color:#c6d0f5;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-frappe pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-frappe table td,html.theme--catppuccin-frappe table th{vertical-align:top}html.theme--catppuccin-frappe table td:not([align]),html.theme--catppuccin-frappe table th:not([align]){text-align:inherit}html.theme--catppuccin-frappe table th{color:#b0bef1}html.theme--catppuccin-frappe .box{background-color:#51576d;border-radius:8px;box-shadow:none;color:#c6d0f5;display:block;padding:1.25rem}html.theme--catppuccin-frappe a.box:hover,html.theme--catppuccin-frappe a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #8caaee}html.theme--catppuccin-frappe a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #8caaee}html.theme--catppuccin-frappe .button{background-color:#292c3c;border-color:#484d69;border-width:1px;color:#8caaee;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-frappe .button strong{color:inherit}html.theme--catppuccin-frappe .button .icon,html.theme--catppuccin-frappe .button .icon.is-small,html.theme--catppuccin-frappe .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-frappe .button .icon.is-medium,html.theme--catppuccin-frappe .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-frappe .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-frappe .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-frappe .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-frappe .button:hover,html.theme--catppuccin-frappe .button.is-hovered{border-color:#737994;color:#b0bef1}html.theme--catppuccin-frappe .button:focus,html.theme--catppuccin-frappe .button.is-focused{border-color:#737994;color:#769aeb}html.theme--catppuccin-frappe .button:focus:not(:active),html.theme--catppuccin-frappe .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button:active,html.theme--catppuccin-frappe .button.is-active{border-color:#51576d;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text{background-color:transparent;border-color:transparent;color:#c6d0f5;text-decoration:underline}html.theme--catppuccin-frappe .button.is-text:hover,html.theme--catppuccin-frappe .button.is-text.is-hovered,html.theme--catppuccin-frappe .button.is-text:focus,html.theme--catppuccin-frappe .button.is-text.is-focused{background-color:#292c3c;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text:active,html.theme--catppuccin-frappe .button.is-text.is-active{background-color:#1f212d;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-frappe .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#8caaee;text-decoration:none}html.theme--catppuccin-frappe .button.is-ghost:hover,html.theme--catppuccin-frappe .button.is-ghost.is-hovered{color:#8caaee;text-decoration:underline}html.theme--catppuccin-frappe .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:hover,html.theme--catppuccin-frappe .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:focus,html.theme--catppuccin-frappe .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:focus:not(:active),html.theme--catppuccin-frappe .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .button.is-white:active,html.theme--catppuccin-frappe .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-frappe .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted:hover,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-frappe .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-outlined:hover,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-white.is-outlined:focus,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:hover,html.theme--catppuccin-frappe .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:focus,html.theme--catppuccin-frappe .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:focus:not(:active),html.theme--catppuccin-frappe .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .button.is-black:active,html.theme--catppuccin-frappe .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-frappe .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted:hover,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-outlined:hover,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-black.is-outlined:focus,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:hover,html.theme--catppuccin-frappe .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:focus,html.theme--catppuccin-frappe .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:focus:not(:active),html.theme--catppuccin-frappe .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .button.is-light:active,html.theme--catppuccin-frappe .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-frappe .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted:hover,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-outlined:hover,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-light.is-outlined:focus,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-dark,html.theme--catppuccin-frappe .content kbd.button{background-color:#414559;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:hover,html.theme--catppuccin-frappe .content kbd.button:hover,html.theme--catppuccin-frappe .button.is-dark.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-hovered{background-color:#3c3f52;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:focus,html.theme--catppuccin-frappe .content kbd.button:focus,html.theme--catppuccin-frappe .button.is-dark.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:focus:not(:active),html.theme--catppuccin-frappe .content kbd.button:focus:not(:active),html.theme--catppuccin-frappe .button.is-dark.is-focused:not(:active),html.theme--catppuccin-frappe .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .button.is-dark:active,html.theme--catppuccin-frappe .content kbd.button:active,html.theme--catppuccin-frappe .button.is-dark.is-active,html.theme--catppuccin-frappe .content kbd.button.is-active{background-color:#363a4a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark[disabled],html.theme--catppuccin-frappe .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button{background-color:#414559;border-color:#414559;box-shadow:none}html.theme--catppuccin-frappe .button.is-dark.is-inverted,html.theme--catppuccin-frappe .content kbd.button.is-inverted{background-color:#fff;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted:hover,html.theme--catppuccin-frappe .content kbd.button.is-inverted:hover,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-dark.is-inverted[disabled],html.theme--catppuccin-frappe .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-loading::after,html.theme--catppuccin-frappe .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined,html.theme--catppuccin-frappe .content kbd.button.is-outlined{background-color:transparent;border-color:#414559;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-outlined:hover,html.theme--catppuccin-frappe .content kbd.button.is-outlined:hover,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-dark.is-outlined:focus,html.theme--catppuccin-frappe .content kbd.button.is-outlined:focus,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-focused{background-color:#414559;border-color:#414559;color:#fff}html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #414559 #414559 !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined[disabled],html.theme--catppuccin-frappe .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-outlined{background-color:transparent;border-color:#414559;box-shadow:none;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #414559 #414559 !important}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-primary,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:hover,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:focus,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:focus:not(:active),html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-frappe .button.is-primary.is-focused:not(:active),html.theme--catppuccin-frappe .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button.is-primary:active,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-frappe .button.is-primary.is-active,html.theme--catppuccin-frappe .docstring>section>a.button.is-active.docs-sourcelink{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink{background-color:#8caaee;border-color:#8caaee;box-shadow:none}html.theme--catppuccin-frappe .button.is-primary.is-inverted,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-primary.is-inverted[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-loading::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-outlined:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-frappe .button.is-primary.is-outlined:focus,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8caaee;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-light,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .button.is-primary.is-light:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-light.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e2eafb;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-primary.is-light:active,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-frappe .button.is-primary.is-light.is-active,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d7e1f9;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-link{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:hover,html.theme--catppuccin-frappe .button.is-link.is-hovered{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:focus,html.theme--catppuccin-frappe .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:focus:not(:active),html.theme--catppuccin-frappe .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button.is-link:active,html.theme--catppuccin-frappe .button.is-link.is-active{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link{background-color:#8caaee;border-color:#8caaee;box-shadow:none}html.theme--catppuccin-frappe .button.is-link.is-inverted{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted:hover,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-link.is-outlined{background-color:transparent;border-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-outlined:hover,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-link.is-outlined:focus,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-focused{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-outlined{background-color:transparent;border-color:#8caaee;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-light{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .button.is-link.is-light:hover,html.theme--catppuccin-frappe .button.is-link.is-light.is-hovered{background-color:#e2eafb;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-link.is-light:active,html.theme--catppuccin-frappe .button.is-link.is-light.is-active{background-color:#d7e1f9;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-info{background-color:#81c8be;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:hover,html.theme--catppuccin-frappe .button.is-info.is-hovered{background-color:#78c4b9;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:focus,html.theme--catppuccin-frappe .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:focus:not(:active),html.theme--catppuccin-frappe .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .button.is-info:active,html.theme--catppuccin-frappe .button.is-info.is-active{background-color:#6fc0b5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info{background-color:#81c8be;border-color:#81c8be;box-shadow:none}html.theme--catppuccin-frappe .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted:hover,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-info.is-outlined{background-color:transparent;border-color:#81c8be;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-outlined:hover,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-info.is-outlined:focus,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-focused{background-color:#81c8be;border-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #81c8be #81c8be !important}html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-outlined{background-color:transparent;border-color:#81c8be;box-shadow:none;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #81c8be #81c8be !important}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-light{background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .button.is-info.is-light:hover,html.theme--catppuccin-frappe .button.is-info.is-light.is-hovered{background-color:#e8f5f3;border-color:transparent;color:#2d675f}html.theme--catppuccin-frappe .button.is-info.is-light:active,html.theme--catppuccin-frappe .button.is-info.is-light.is-active{background-color:#dff1ef;border-color:transparent;color:#2d675f}html.theme--catppuccin-frappe .button.is-success{background-color:#a6d189;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:hover,html.theme--catppuccin-frappe .button.is-success.is-hovered{background-color:#9fcd80;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:focus,html.theme--catppuccin-frappe .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:focus:not(:active),html.theme--catppuccin-frappe .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .button.is-success:active,html.theme--catppuccin-frappe .button.is-success.is-active{background-color:#98ca77;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success{background-color:#a6d189;border-color:#a6d189;box-shadow:none}html.theme--catppuccin-frappe .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted:hover,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-success.is-outlined{background-color:transparent;border-color:#a6d189;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-outlined:hover,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-success.is-outlined:focus,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-focused{background-color:#a6d189;border-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6d189 #a6d189 !important}html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-outlined{background-color:transparent;border-color:#a6d189;box-shadow:none;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6d189 #a6d189 !important}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-light{background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .button.is-success.is-light:hover,html.theme--catppuccin-frappe .button.is-success.is-light.is-hovered{background-color:#edf6e7;border-color:transparent;color:#446a29}html.theme--catppuccin-frappe .button.is-success.is-light:active,html.theme--catppuccin-frappe .button.is-success.is-light.is-active{background-color:#e6f2de;border-color:transparent;color:#446a29}html.theme--catppuccin-frappe .button.is-warning{background-color:#e5c890;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:hover,html.theme--catppuccin-frappe .button.is-warning.is-hovered{background-color:#e3c386;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:focus,html.theme--catppuccin-frappe .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:focus:not(:active),html.theme--catppuccin-frappe .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .button.is-warning:active,html.theme--catppuccin-frappe .button.is-warning.is-active{background-color:#e0be7b;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning{background-color:#e5c890;border-color:#e5c890;box-shadow:none}html.theme--catppuccin-frappe .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted:hover,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined{background-color:transparent;border-color:#e5c890;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-outlined:hover,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-warning.is-outlined:focus,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-focused{background-color:#e5c890;border-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #e5c890 #e5c890 !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-outlined{background-color:transparent;border-color:#e5c890;box-shadow:none;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e5c890 #e5c890 !important}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-light{background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .button.is-warning.is-light:hover,html.theme--catppuccin-frappe .button.is-warning.is-light.is-hovered{background-color:#f9f2e4;border-color:transparent;color:#78591c}html.theme--catppuccin-frappe .button.is-warning.is-light:active,html.theme--catppuccin-frappe .button.is-warning.is-light.is-active{background-color:#f6edda;border-color:transparent;color:#78591c}html.theme--catppuccin-frappe .button.is-danger{background-color:#e78284;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:hover,html.theme--catppuccin-frappe .button.is-danger.is-hovered{background-color:#e57779;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:focus,html.theme--catppuccin-frappe .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:focus:not(:active),html.theme--catppuccin-frappe .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .button.is-danger:active,html.theme--catppuccin-frappe .button.is-danger.is-active{background-color:#e36d6f;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger{background-color:#e78284;border-color:#e78284;box-shadow:none}html.theme--catppuccin-frappe .button.is-danger.is-inverted{background-color:#fff;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted:hover,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined{background-color:transparent;border-color:#e78284;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-outlined:hover,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-danger.is-outlined:focus,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-focused{background-color:#e78284;border-color:#e78284;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #e78284 #e78284 !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-outlined{background-color:transparent;border-color:#e78284;box-shadow:none;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e78284 #e78284 !important}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-light{background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .button.is-danger.is-light:hover,html.theme--catppuccin-frappe .button.is-danger.is-light.is-hovered{background-color:#fae3e4;border-color:transparent;color:#9a1e20}html.theme--catppuccin-frappe .button.is-danger.is-light:active,html.theme--catppuccin-frappe .button.is-danger.is-light.is-active{background-color:#f8d8d9;border-color:transparent;color:#9a1e20}html.theme--catppuccin-frappe .button.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-frappe .button.is-small:not(.is-rounded),html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-frappe .button.is-normal{font-size:1rem}html.theme--catppuccin-frappe .button.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .button.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button{background-color:#737994;border-color:#626880;box-shadow:none;opacity:.5}html.theme--catppuccin-frappe .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-frappe .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-frappe .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-frappe .button.is-static{background-color:#292c3c;border-color:#626880;color:#838ba7;box-shadow:none;pointer-events:none}html.theme--catppuccin-frappe .button.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-frappe .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-frappe .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-frappe .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-frappe .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-frappe .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-frappe .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-frappe .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-frappe .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-frappe .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-frappe .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-frappe .buttons.has-addons .button:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-frappe .buttons.has-addons .button:focus,html.theme--catppuccin-frappe .buttons.has-addons .button.is-focused,html.theme--catppuccin-frappe .buttons.has-addons .button:active,html.theme--catppuccin-frappe .buttons.has-addons .button.is-active,html.theme--catppuccin-frappe .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-frappe .buttons.has-addons .button:focus:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-frappe .buttons.has-addons .button:active:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-frappe .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .buttons.is-centered{justify-content:center}html.theme--catppuccin-frappe .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-frappe .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .button.is-responsive.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-frappe .button.is-responsive,html.theme--catppuccin-frappe .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-frappe .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-frappe .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .button.is-responsive.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-frappe .button.is-responsive,html.theme--catppuccin-frappe .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-frappe .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-frappe .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-frappe .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-frappe .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-frappe .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-frappe .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-frappe .content li+li{margin-top:0.25em}html.theme--catppuccin-frappe .content p:not(:last-child),html.theme--catppuccin-frappe .content dl:not(:last-child),html.theme--catppuccin-frappe .content ol:not(:last-child),html.theme--catppuccin-frappe .content ul:not(:last-child),html.theme--catppuccin-frappe .content blockquote:not(:last-child),html.theme--catppuccin-frappe .content pre:not(:last-child),html.theme--catppuccin-frappe .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-frappe .content h1,html.theme--catppuccin-frappe .content h2,html.theme--catppuccin-frappe .content h3,html.theme--catppuccin-frappe .content h4,html.theme--catppuccin-frappe .content h5,html.theme--catppuccin-frappe .content h6{color:#c6d0f5;font-weight:600;line-height:1.125}html.theme--catppuccin-frappe .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-frappe .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-frappe .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-frappe .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-frappe .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-frappe .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-frappe .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-frappe .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-frappe .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-frappe .content blockquote{background-color:#292c3c;border-left:5px solid #626880;padding:1.25em 1.5em}html.theme--catppuccin-frappe .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-frappe .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-frappe .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-frappe .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-frappe .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-frappe .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-frappe .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-frappe .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-frappe .content ul ul ul{list-style-type:square}html.theme--catppuccin-frappe .content dd{margin-left:2em}html.theme--catppuccin-frappe .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-frappe .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-frappe .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-frappe .content figure img{display:inline-block}html.theme--catppuccin-frappe .content figure figcaption{font-style:italic}html.theme--catppuccin-frappe .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-frappe .content sup,html.theme--catppuccin-frappe .content sub{font-size:75%}html.theme--catppuccin-frappe .content table{width:100%}html.theme--catppuccin-frappe .content table td,html.theme--catppuccin-frappe .content table th{border:1px solid #626880;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-frappe .content table th{color:#b0bef1}html.theme--catppuccin-frappe .content table th:not([align]){text-align:inherit}html.theme--catppuccin-frappe .content table thead td,html.theme--catppuccin-frappe .content table thead th{border-width:0 0 2px;color:#b0bef1}html.theme--catppuccin-frappe .content table tfoot td,html.theme--catppuccin-frappe .content table tfoot th{border-width:2px 0 0;color:#b0bef1}html.theme--catppuccin-frappe .content table tbody tr:last-child td,html.theme--catppuccin-frappe .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-frappe .content .tabs li+li{margin-top:0}html.theme--catppuccin-frappe .content.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-frappe .content.is-normal{font-size:1rem}html.theme--catppuccin-frappe .content.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .content.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-frappe .icon.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-frappe .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-frappe .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-frappe .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-frappe .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-frappe .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-frappe div.icon-text{display:flex}html.theme--catppuccin-frappe .image,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-frappe .image img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-frappe .image img.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-frappe .image.is-fullwidth,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-frappe .image.is-square img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-frappe .image.is-square .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-frappe .image.is-1by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-frappe .image.is-1by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-frappe .image.is-5by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-frappe .image.is-5by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-frappe .image.is-4by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-frappe .image.is-4by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-frappe .image.is-3by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-frappe .image.is-5by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-frappe .image.is-5by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-frappe .image.is-16by9 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-frappe .image.is-16by9 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-frappe .image.is-2by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-frappe .image.is-2by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-frappe .image.is-3by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-frappe .image.is-3by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-frappe .image.is-4by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-frappe .image.is-4by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-frappe .image.is-3by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-frappe .image.is-3by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-frappe .image.is-2by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-frappe .image.is-2by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-frappe .image.is-3by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-frappe .image.is-9by16 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-frappe .image.is-9by16 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-frappe .image.is-1by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-frappe .image.is-1by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-frappe .image.is-1by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-frappe .image.is-1by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-frappe .image.is-square,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-frappe .image.is-1by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-frappe .image.is-5by4,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-frappe .image.is-4by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-frappe .image.is-3by2,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-frappe .image.is-5by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-frappe .image.is-16by9,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-frappe .image.is-2by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-frappe .image.is-3by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-frappe .image.is-4by5,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-frappe .image.is-3by4,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-frappe .image.is-2by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-frappe .image.is-3by5,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-frappe .image.is-9by16,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-frappe .image.is-1by2,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-frappe .image.is-1by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-frappe .image.is-16x16,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-frappe .image.is-24x24,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-frappe .image.is-32x32,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-frappe .image.is-48x48,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-frappe .image.is-64x64,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-frappe .image.is-96x96,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-frappe .image.is-128x128,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-frappe .notification{background-color:#292c3c;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-frappe .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-frappe .notification strong{color:currentColor}html.theme--catppuccin-frappe .notification code,html.theme--catppuccin-frappe .notification pre{background:#fff}html.theme--catppuccin-frappe .notification pre code{background:transparent}html.theme--catppuccin-frappe .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-frappe .notification .title,html.theme--catppuccin-frappe .notification .subtitle,html.theme--catppuccin-frappe .notification .content{color:currentColor}html.theme--catppuccin-frappe .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-dark,html.theme--catppuccin-frappe .content kbd.notification{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .notification.is-primary,html.theme--catppuccin-frappe .docstring>section>a.notification.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .notification.is-primary.is-light,html.theme--catppuccin-frappe .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .notification.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .notification.is-link.is-light{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .notification.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-info.is-light{background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .notification.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-success.is-light{background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .notification.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-warning.is-light{background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .notification.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .notification.is-danger.is-light{background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-frappe .progress::-webkit-progress-bar{background-color:#51576d}html.theme--catppuccin-frappe .progress::-webkit-progress-value{background-color:#838ba7}html.theme--catppuccin-frappe .progress::-moz-progress-bar{background-color:#838ba7}html.theme--catppuccin-frappe .progress::-ms-fill{background-color:#838ba7;border:none}html.theme--catppuccin-frappe .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-frappe .content kbd.progress::-webkit-progress-value{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-frappe .content kbd.progress::-moz-progress-bar{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark::-ms-fill,html.theme--catppuccin-frappe .content kbd.progress::-ms-fill{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark:indeterminate,html.theme--catppuccin-frappe .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #414559 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary::-ms-fill,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary:indeterminate,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #8caaee 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-link::-webkit-progress-value{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link::-moz-progress-bar{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link::-ms-fill{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link:indeterminate{background-image:linear-gradient(to right, #8caaee 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-info::-webkit-progress-value{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info::-moz-progress-bar{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info::-ms-fill{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info:indeterminate{background-image:linear-gradient(to right, #81c8be 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-success::-webkit-progress-value{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success::-moz-progress-bar{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success::-ms-fill{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6d189 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-warning::-webkit-progress-value{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning::-moz-progress-bar{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning::-ms-fill{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #e5c890 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-danger::-webkit-progress-value{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger::-moz-progress-bar{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger::-ms-fill{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #e78284 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#51576d;background-image:linear-gradient(to right, #c6d0f5 30%, #51576d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-frappe .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-frappe .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-frappe .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-frappe .progress.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-frappe .progress.is-medium{height:1.25rem}html.theme--catppuccin-frappe .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-frappe .table{background-color:#51576d;color:#c6d0f5}html.theme--catppuccin-frappe .table td,html.theme--catppuccin-frappe .table th{border:1px solid #626880;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-frappe .table td.is-white,html.theme--catppuccin-frappe .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .table td.is-black,html.theme--catppuccin-frappe .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .table td.is-light,html.theme--catppuccin-frappe .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-dark,html.theme--catppuccin-frappe .table th.is-dark{background-color:#414559;border-color:#414559;color:#fff}html.theme--catppuccin-frappe .table td.is-primary,html.theme--catppuccin-frappe .table th.is-primary{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-link,html.theme--catppuccin-frappe .table th.is-link{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-info,html.theme--catppuccin-frappe .table th.is-info{background-color:#81c8be;border-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-success,html.theme--catppuccin-frappe .table th.is-success{background-color:#a6d189;border-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-warning,html.theme--catppuccin-frappe .table th.is-warning{background-color:#e5c890;border-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-danger,html.theme--catppuccin-frappe .table th.is-danger{background-color:#e78284;border-color:#e78284;color:#fff}html.theme--catppuccin-frappe .table td.is-narrow,html.theme--catppuccin-frappe .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-frappe .table td.is-selected,html.theme--catppuccin-frappe .table th.is-selected{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-selected a,html.theme--catppuccin-frappe .table td.is-selected strong,html.theme--catppuccin-frappe .table th.is-selected a,html.theme--catppuccin-frappe .table th.is-selected strong{color:currentColor}html.theme--catppuccin-frappe .table td.is-vcentered,html.theme--catppuccin-frappe .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-frappe .table th{color:#b0bef1}html.theme--catppuccin-frappe .table th:not([align]){text-align:left}html.theme--catppuccin-frappe .table tr.is-selected{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table tr.is-selected a,html.theme--catppuccin-frappe .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-frappe .table tr.is-selected td,html.theme--catppuccin-frappe .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-frappe .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table thead td,html.theme--catppuccin-frappe .table thead th{border-width:0 0 2px;color:#b0bef1}html.theme--catppuccin-frappe .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table tfoot td,html.theme--catppuccin-frappe .table tfoot th{border-width:2px 0 0;color:#b0bef1}html.theme--catppuccin-frappe .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table tbody tr:last-child td,html.theme--catppuccin-frappe .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-frappe .table.is-bordered td,html.theme--catppuccin-frappe .table.is-bordered th{border-width:1px}html.theme--catppuccin-frappe .table.is-bordered tr:last-child td,html.theme--catppuccin-frappe .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-frappe .table.is-fullwidth{width:100%}html.theme--catppuccin-frappe .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#414559}html.theme--catppuccin-frappe .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#414559}html.theme--catppuccin-frappe .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#454a5f}html.theme--catppuccin-frappe .table.is-narrow td,html.theme--catppuccin-frappe .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-frappe .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#414559}html.theme--catppuccin-frappe .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-frappe .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .tags .tag,html.theme--catppuccin-frappe .tags .content kbd,html.theme--catppuccin-frappe .content .tags kbd,html.theme--catppuccin-frappe .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-frappe .tags .tag:not(:last-child),html.theme--catppuccin-frappe .tags .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags kbd:not(:last-child),html.theme--catppuccin-frappe .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-frappe .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-frappe .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-frappe .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-frappe .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-frappe .tags.is-centered{justify-content:center}html.theme--catppuccin-frappe .tags.is-centered .tag,html.theme--catppuccin-frappe .tags.is-centered .content kbd,html.theme--catppuccin-frappe .content .tags.is-centered kbd,html.theme--catppuccin-frappe .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-frappe .tags.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .tags.is-right .tag:not(:first-child),html.theme--catppuccin-frappe .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-frappe .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-frappe .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-frappe .tags.is-right .tag:not(:last-child),html.theme--catppuccin-frappe .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-frappe .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-frappe .tags.has-addons .tag,html.theme--catppuccin-frappe .tags.has-addons .content kbd,html.theme--catppuccin-frappe .content .tags.has-addons kbd,html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-frappe .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-frappe .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-frappe .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-frappe .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-frappe .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-frappe .tag:not(body),html.theme--catppuccin-frappe .content kbd:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#292c3c;border-radius:.4em;color:#c6d0f5;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-frappe .tag:not(body) .delete,html.theme--catppuccin-frappe .content kbd:not(body) .delete,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-frappe .tag.is-white:not(body),html.theme--catppuccin-frappe .content kbd.is-white:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .tag.is-black:not(body),html.theme--catppuccin-frappe .content kbd.is-black:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .tag.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-dark:not(body),html.theme--catppuccin-frappe .content kbd:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-frappe .content .docstring>section>kbd:not(body){background-color:#414559;color:#fff}html.theme--catppuccin-frappe .tag.is-primary:not(body),html.theme--catppuccin-frappe .content kbd.is-primary:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .tag.is-primary.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .tag.is-link:not(body),html.theme--catppuccin-frappe .content kbd.is-link:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .tag.is-link.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-link.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .tag.is-info:not(body),html.theme--catppuccin-frappe .content kbd.is-info:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-info.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-info.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .tag.is-success:not(body),html.theme--catppuccin-frappe .content kbd.is-success:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-success.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-success.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .tag.is-warning:not(body),html.theme--catppuccin-frappe .content kbd.is-warning:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-warning.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .tag.is-danger:not(body),html.theme--catppuccin-frappe .content kbd.is-danger:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .tag.is-danger.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .tag.is-normal:not(body),html.theme--catppuccin-frappe .content kbd.is-normal:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-frappe .tag.is-medium:not(body),html.theme--catppuccin-frappe .content kbd.is-medium:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-frappe .tag.is-large:not(body),html.theme--catppuccin-frappe .content kbd.is-large:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-frappe .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-frappe .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-frappe .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-frappe .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-frappe .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-frappe .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-frappe .tag.is-delete:not(body),html.theme--catppuccin-frappe .content kbd.is-delete:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-frappe .tag.is-delete:not(body)::before,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::before,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-frappe .tag.is-delete:not(body)::after,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::after,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-frappe .tag.is-delete:not(body)::before,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::before,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-frappe .tag.is-delete:not(body)::after,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::after,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-frappe .tag.is-delete:not(body):hover,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):hover,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-frappe .tag.is-delete:not(body):focus,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):focus,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1f212d}html.theme--catppuccin-frappe .tag.is-delete:not(body):active,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):active,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#14161e}html.theme--catppuccin-frappe .tag.is-rounded:not(body),html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-frappe .content kbd.is-rounded:not(body),html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-frappe a.tag:hover,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-frappe .title,html.theme--catppuccin-frappe .subtitle{word-break:break-word}html.theme--catppuccin-frappe .title em,html.theme--catppuccin-frappe .title span,html.theme--catppuccin-frappe .subtitle em,html.theme--catppuccin-frappe .subtitle span{font-weight:inherit}html.theme--catppuccin-frappe .title sub,html.theme--catppuccin-frappe .subtitle sub{font-size:.75em}html.theme--catppuccin-frappe .title sup,html.theme--catppuccin-frappe .subtitle sup{font-size:.75em}html.theme--catppuccin-frappe .title .tag,html.theme--catppuccin-frappe .title .content kbd,html.theme--catppuccin-frappe .content .title kbd,html.theme--catppuccin-frappe .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-frappe .subtitle .tag,html.theme--catppuccin-frappe .subtitle .content kbd,html.theme--catppuccin-frappe .content .subtitle kbd,html.theme--catppuccin-frappe .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-frappe .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-frappe .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-frappe .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-frappe .title.is-1{font-size:3rem}html.theme--catppuccin-frappe .title.is-2{font-size:2.5rem}html.theme--catppuccin-frappe .title.is-3{font-size:2rem}html.theme--catppuccin-frappe .title.is-4{font-size:1.5rem}html.theme--catppuccin-frappe .title.is-5{font-size:1.25rem}html.theme--catppuccin-frappe .title.is-6{font-size:1rem}html.theme--catppuccin-frappe .title.is-7{font-size:.75rem}html.theme--catppuccin-frappe .subtitle{color:#737994;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-frappe .subtitle strong{color:#737994;font-weight:600}html.theme--catppuccin-frappe .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-frappe .subtitle.is-1{font-size:3rem}html.theme--catppuccin-frappe .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-frappe .subtitle.is-3{font-size:2rem}html.theme--catppuccin-frappe .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-frappe .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-frappe .subtitle.is-6{font-size:1rem}html.theme--catppuccin-frappe .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-frappe .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-frappe .number{align-items:center;background-color:#292c3c;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{background-color:#303446;border-color:#626880;border-radius:.4em;color:#838ba7}html.theme--catppuccin-frappe .select select::-moz-placeholder,html.theme--catppuccin-frappe .textarea::-moz-placeholder,html.theme--catppuccin-frappe .input::-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select::-webkit-input-placeholder,html.theme--catppuccin-frappe .textarea::-webkit-input-placeholder,html.theme--catppuccin-frappe .input::-webkit-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:-moz-placeholder,html.theme--catppuccin-frappe .textarea:-moz-placeholder,html.theme--catppuccin-frappe .input:-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:-ms-input-placeholder,html.theme--catppuccin-frappe .textarea:-ms-input-placeholder,html.theme--catppuccin-frappe .input:-ms-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:hover,html.theme--catppuccin-frappe .textarea:hover,html.theme--catppuccin-frappe .input:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-frappe .select select.is-hovered,html.theme--catppuccin-frappe .is-hovered.textarea,html.theme--catppuccin-frappe .is-hovered.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#737994}html.theme--catppuccin-frappe .select select:focus,html.theme--catppuccin-frappe .textarea:focus,html.theme--catppuccin-frappe .input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-frappe .select select.is-focused,html.theme--catppuccin-frappe .is-focused.textarea,html.theme--catppuccin-frappe .is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .select select:active,html.theme--catppuccin-frappe .textarea:active,html.theme--catppuccin-frappe .input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-frappe .select select.is-active,html.theme--catppuccin-frappe .is-active.textarea,html.theme--catppuccin-frappe .is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#8caaee;box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select select[disabled],html.theme--catppuccin-frappe .textarea[disabled],html.theme--catppuccin-frappe .input[disabled],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-frappe .select select,fieldset[disabled] html.theme--catppuccin-frappe .textarea,fieldset[disabled] html.theme--catppuccin-frappe .input,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{background-color:#737994;border-color:#292c3c;box-shadow:none;color:#f1f4fd}html.theme--catppuccin-frappe .select select[disabled]::-moz-placeholder,html.theme--catppuccin-frappe .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-frappe .input[disabled]::-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]:-moz-placeholder,html.theme--catppuccin-frappe .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-frappe .input[disabled]:-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-frappe .textarea[readonly],html.theme--catppuccin-frappe .input[readonly],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-frappe .is-white.textarea,html.theme--catppuccin-frappe .is-white.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-frappe .is-white.textarea:focus,html.theme--catppuccin-frappe .is-white.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-frappe .is-white.is-focused.textarea,html.theme--catppuccin-frappe .is-white.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-white.textarea:active,html.theme--catppuccin-frappe .is-white.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-frappe .is-white.is-active.textarea,html.theme--catppuccin-frappe .is-white.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .is-black.textarea,html.theme--catppuccin-frappe .is-black.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-frappe .is-black.textarea:focus,html.theme--catppuccin-frappe .is-black.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-frappe .is-black.is-focused.textarea,html.theme--catppuccin-frappe .is-black.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-black.textarea:active,html.theme--catppuccin-frappe .is-black.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-frappe .is-black.is-active.textarea,html.theme--catppuccin-frappe .is-black.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .is-light.textarea,html.theme--catppuccin-frappe .is-light.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-frappe .is-light.textarea:focus,html.theme--catppuccin-frappe .is-light.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-frappe .is-light.is-focused.textarea,html.theme--catppuccin-frappe .is-light.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-light.textarea:active,html.theme--catppuccin-frappe .is-light.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-frappe .is-light.is-active.textarea,html.theme--catppuccin-frappe .is-light.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .is-dark.textarea,html.theme--catppuccin-frappe .content kbd.textarea,html.theme--catppuccin-frappe .is-dark.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-frappe .content kbd.input{border-color:#414559}html.theme--catppuccin-frappe .is-dark.textarea:focus,html.theme--catppuccin-frappe .content kbd.textarea:focus,html.theme--catppuccin-frappe .is-dark.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-frappe .content kbd.input:focus,html.theme--catppuccin-frappe .is-dark.is-focused.textarea,html.theme--catppuccin-frappe .content kbd.is-focused.textarea,html.theme--catppuccin-frappe .is-dark.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .content kbd.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-dark.textarea:active,html.theme--catppuccin-frappe .content kbd.textarea:active,html.theme--catppuccin-frappe .is-dark.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-frappe .content kbd.input:active,html.theme--catppuccin-frappe .is-dark.is-active.textarea,html.theme--catppuccin-frappe .content kbd.is-active.textarea,html.theme--catppuccin-frappe .is-dark.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .content kbd.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .is-primary.textarea,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink{border-color:#8caaee}html.theme--catppuccin-frappe .is-primary.textarea:focus,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-frappe .is-primary.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-frappe .is-primary.is-focused.textarea,html.theme--catppuccin-frappe .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.textarea:active,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-frappe .is-primary.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-frappe .is-primary.is-active.textarea,html.theme--catppuccin-frappe .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .is-link.textarea,html.theme--catppuccin-frappe .is-link.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#8caaee}html.theme--catppuccin-frappe .is-link.textarea:focus,html.theme--catppuccin-frappe .is-link.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-frappe .is-link.is-focused.textarea,html.theme--catppuccin-frappe .is-link.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-link.textarea:active,html.theme--catppuccin-frappe .is-link.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-frappe .is-link.is-active.textarea,html.theme--catppuccin-frappe .is-link.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .is-info.textarea,html.theme--catppuccin-frappe .is-info.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#81c8be}html.theme--catppuccin-frappe .is-info.textarea:focus,html.theme--catppuccin-frappe .is-info.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-frappe .is-info.is-focused.textarea,html.theme--catppuccin-frappe .is-info.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-info.textarea:active,html.theme--catppuccin-frappe .is-info.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-frappe .is-info.is-active.textarea,html.theme--catppuccin-frappe .is-info.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .is-success.textarea,html.theme--catppuccin-frappe .is-success.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6d189}html.theme--catppuccin-frappe .is-success.textarea:focus,html.theme--catppuccin-frappe .is-success.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-frappe .is-success.is-focused.textarea,html.theme--catppuccin-frappe .is-success.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-success.textarea:active,html.theme--catppuccin-frappe .is-success.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-frappe .is-success.is-active.textarea,html.theme--catppuccin-frappe .is-success.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .is-warning.textarea,html.theme--catppuccin-frappe .is-warning.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#e5c890}html.theme--catppuccin-frappe .is-warning.textarea:focus,html.theme--catppuccin-frappe .is-warning.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-frappe .is-warning.is-focused.textarea,html.theme--catppuccin-frappe .is-warning.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-warning.textarea:active,html.theme--catppuccin-frappe .is-warning.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-frappe .is-warning.is-active.textarea,html.theme--catppuccin-frappe .is-warning.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .is-danger.textarea,html.theme--catppuccin-frappe .is-danger.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#e78284}html.theme--catppuccin-frappe .is-danger.textarea:focus,html.theme--catppuccin-frappe .is-danger.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-frappe .is-danger.is-focused.textarea,html.theme--catppuccin-frappe .is-danger.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-danger.textarea:active,html.theme--catppuccin-frappe .is-danger.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-frappe .is-danger.is-active.textarea,html.theme--catppuccin-frappe .is-danger.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .is-small.textarea,html.theme--catppuccin-frappe .is-small.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-frappe .is-medium.textarea,html.theme--catppuccin-frappe .is-medium.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .is-large.textarea,html.theme--catppuccin-frappe .is-large.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .is-fullwidth.textarea,html.theme--catppuccin-frappe .is-fullwidth.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-frappe .is-inline.textarea,html.theme--catppuccin-frappe .is-inline.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-frappe .input.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-frappe .input.is-static,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-frappe .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-frappe .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-frappe .textarea[rows]{height:initial}html.theme--catppuccin-frappe .textarea.has-fixed-size{resize:none}html.theme--catppuccin-frappe .radio,html.theme--catppuccin-frappe .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-frappe .radio input,html.theme--catppuccin-frappe .checkbox input{cursor:pointer}html.theme--catppuccin-frappe .radio:hover,html.theme--catppuccin-frappe .checkbox:hover{color:#99d1db}html.theme--catppuccin-frappe .radio[disabled],html.theme--catppuccin-frappe .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-frappe .radio,fieldset[disabled] html.theme--catppuccin-frappe .checkbox,html.theme--catppuccin-frappe .radio input[disabled],html.theme--catppuccin-frappe .checkbox input[disabled]{color:#f1f4fd;cursor:not-allowed}html.theme--catppuccin-frappe .radio+.radio{margin-left:.5em}html.theme--catppuccin-frappe .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-frappe .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading)::after{border-color:#8caaee;right:1.125em;z-index:4}html.theme--catppuccin-frappe .select.is-rounded select,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-frappe .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-frappe .select select::-ms-expand{display:none}html.theme--catppuccin-frappe .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-frappe .select select:hover{border-color:#292c3c}html.theme--catppuccin-frappe .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-frappe .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-frappe .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#99d1db}html.theme--catppuccin-frappe .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-frappe .select.is-white select{border-color:#fff}html.theme--catppuccin-frappe .select.is-white select:hover,html.theme--catppuccin-frappe .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-frappe .select.is-white select:focus,html.theme--catppuccin-frappe .select.is-white select.is-focused,html.theme--catppuccin-frappe .select.is-white select:active,html.theme--catppuccin-frappe .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-frappe .select.is-black select:hover,html.theme--catppuccin-frappe .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-frappe .select.is-black select:focus,html.theme--catppuccin-frappe .select.is-black select.is-focused,html.theme--catppuccin-frappe .select.is-black select:active,html.theme--catppuccin-frappe .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-frappe .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-frappe .select.is-light select:hover,html.theme--catppuccin-frappe .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-frappe .select.is-light select:focus,html.theme--catppuccin-frappe .select.is-light select.is-focused,html.theme--catppuccin-frappe .select.is-light select:active,html.theme--catppuccin-frappe .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .select.is-dark:not(:hover)::after,html.theme--catppuccin-frappe .content kbd.select:not(:hover)::after{border-color:#414559}html.theme--catppuccin-frappe .select.is-dark select,html.theme--catppuccin-frappe .content kbd.select select{border-color:#414559}html.theme--catppuccin-frappe .select.is-dark select:hover,html.theme--catppuccin-frappe .content kbd.select select:hover,html.theme--catppuccin-frappe .select.is-dark select.is-hovered,html.theme--catppuccin-frappe .content kbd.select select.is-hovered{border-color:#363a4a}html.theme--catppuccin-frappe .select.is-dark select:focus,html.theme--catppuccin-frappe .content kbd.select select:focus,html.theme--catppuccin-frappe .select.is-dark select.is-focused,html.theme--catppuccin-frappe .content kbd.select select.is-focused,html.theme--catppuccin-frappe .select.is-dark select:active,html.theme--catppuccin-frappe .content kbd.select select:active,html.theme--catppuccin-frappe .select.is-dark select.is-active,html.theme--catppuccin-frappe .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .select.is-primary:not(:hover)::after,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-primary select,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-primary select:hover,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-frappe .select.is-primary select.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#769aeb}html.theme--catppuccin-frappe .select.is-primary select:focus,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-frappe .select.is-primary select.is-focused,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-frappe .select.is-primary select:active,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-frappe .select.is-primary select.is-active,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select.is-link:not(:hover)::after{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-link select{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-link select:hover,html.theme--catppuccin-frappe .select.is-link select.is-hovered{border-color:#769aeb}html.theme--catppuccin-frappe .select.is-link select:focus,html.theme--catppuccin-frappe .select.is-link select.is-focused,html.theme--catppuccin-frappe .select.is-link select:active,html.theme--catppuccin-frappe .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select.is-info:not(:hover)::after{border-color:#81c8be}html.theme--catppuccin-frappe .select.is-info select{border-color:#81c8be}html.theme--catppuccin-frappe .select.is-info select:hover,html.theme--catppuccin-frappe .select.is-info select.is-hovered{border-color:#6fc0b5}html.theme--catppuccin-frappe .select.is-info select:focus,html.theme--catppuccin-frappe .select.is-info select.is-focused,html.theme--catppuccin-frappe .select.is-info select:active,html.theme--catppuccin-frappe .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .select.is-success:not(:hover)::after{border-color:#a6d189}html.theme--catppuccin-frappe .select.is-success select{border-color:#a6d189}html.theme--catppuccin-frappe .select.is-success select:hover,html.theme--catppuccin-frappe .select.is-success select.is-hovered{border-color:#98ca77}html.theme--catppuccin-frappe .select.is-success select:focus,html.theme--catppuccin-frappe .select.is-success select.is-focused,html.theme--catppuccin-frappe .select.is-success select:active,html.theme--catppuccin-frappe .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .select.is-warning:not(:hover)::after{border-color:#e5c890}html.theme--catppuccin-frappe .select.is-warning select{border-color:#e5c890}html.theme--catppuccin-frappe .select.is-warning select:hover,html.theme--catppuccin-frappe .select.is-warning select.is-hovered{border-color:#e0be7b}html.theme--catppuccin-frappe .select.is-warning select:focus,html.theme--catppuccin-frappe .select.is-warning select.is-focused,html.theme--catppuccin-frappe .select.is-warning select:active,html.theme--catppuccin-frappe .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .select.is-danger:not(:hover)::after{border-color:#e78284}html.theme--catppuccin-frappe .select.is-danger select{border-color:#e78284}html.theme--catppuccin-frappe .select.is-danger select:hover,html.theme--catppuccin-frappe .select.is-danger select.is-hovered{border-color:#e36d6f}html.theme--catppuccin-frappe .select.is-danger select:focus,html.theme--catppuccin-frappe .select.is-danger select.is-focused,html.theme--catppuccin-frappe .select.is-danger select:active,html.theme--catppuccin-frappe .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .select.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-frappe .select.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .select.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .select.is-disabled::after{border-color:#f1f4fd !important;opacity:0.5}html.theme--catppuccin-frappe .select.is-fullwidth{width:100%}html.theme--catppuccin-frappe .select.is-fullwidth select{width:100%}html.theme--catppuccin-frappe .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-frappe .select.is-loading.is-small:after,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-frappe .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-frappe .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-frappe .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-frappe .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:hover .file-cta,html.theme--catppuccin-frappe .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:focus .file-cta,html.theme--catppuccin-frappe .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:active .file-cta,html.theme--catppuccin-frappe .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-black:hover .file-cta,html.theme--catppuccin-frappe .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-black:focus .file-cta,html.theme--catppuccin-frappe .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-black:active .file-cta,html.theme--catppuccin-frappe .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:hover .file-cta,html.theme--catppuccin-frappe .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:focus .file-cta,html.theme--catppuccin-frappe .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:active .file-cta,html.theme--catppuccin-frappe .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-dark .file-cta,html.theme--catppuccin-frappe .content kbd.file .file-cta{background-color:#414559;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-dark:hover .file-cta,html.theme--catppuccin-frappe .content kbd.file:hover .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-hovered .file-cta{background-color:#3c3f52;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-dark:focus .file-cta,html.theme--catppuccin-frappe .content kbd.file:focus .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-focused .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(65,69,89,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-dark:active .file-cta,html.theme--catppuccin-frappe .content kbd.file:active .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-active .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-active .file-cta{background-color:#363a4a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary:hover .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary:focus .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-focused .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(140,170,238,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-primary:active .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-active .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link .file-cta{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link:hover .file-cta,html.theme--catppuccin-frappe .file.is-link.is-hovered .file-cta{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link:focus .file-cta,html.theme--catppuccin-frappe .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(140,170,238,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-link:active .file-cta,html.theme--catppuccin-frappe .file.is-link.is-active .file-cta{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-info .file-cta{background-color:#81c8be;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:hover .file-cta,html.theme--catppuccin-frappe .file.is-info.is-hovered .file-cta{background-color:#78c4b9;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:focus .file-cta,html.theme--catppuccin-frappe .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(129,200,190,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:active .file-cta,html.theme--catppuccin-frappe .file.is-info.is-active .file-cta{background-color:#6fc0b5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success .file-cta{background-color:#a6d189;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:hover .file-cta,html.theme--catppuccin-frappe .file.is-success.is-hovered .file-cta{background-color:#9fcd80;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:focus .file-cta,html.theme--catppuccin-frappe .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,209,137,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:active .file-cta,html.theme--catppuccin-frappe .file.is-success.is-active .file-cta{background-color:#98ca77;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning .file-cta{background-color:#e5c890;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:hover .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-hovered .file-cta{background-color:#e3c386;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:focus .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(229,200,144,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:active .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-active .file-cta{background-color:#e0be7b;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-danger .file-cta{background-color:#e78284;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-danger:hover .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-hovered .file-cta{background-color:#e57779;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-danger:focus .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(231,130,132,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-danger:active .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-active .file-cta{background-color:#e36d6f;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-frappe .file.is-normal{font-size:1rem}html.theme--catppuccin-frappe .file.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-frappe .file.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-frappe .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-frappe .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-frappe .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-frappe .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-frappe .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-frappe .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-frappe .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-frappe .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-frappe .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-frappe .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-frappe .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-frappe .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-frappe .file.is-centered{justify-content:center}html.theme--catppuccin-frappe .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-frappe .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-frappe .file.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-frappe .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-frappe .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-frappe .file-label:hover .file-cta{background-color:#3c3f52;color:#b0bef1}html.theme--catppuccin-frappe .file-label:hover .file-name{border-color:#5c6279}html.theme--catppuccin-frappe .file-label:active .file-cta{background-color:#363a4a;color:#b0bef1}html.theme--catppuccin-frappe .file-label:active .file-name{border-color:#575c72}html.theme--catppuccin-frappe .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe .file-name{border-color:#626880;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-frappe .file-cta{background-color:#414559;color:#c6d0f5}html.theme--catppuccin-frappe .file-name{border-color:#626880;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-frappe .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-frappe .file-icon .fa{font-size:14px}html.theme--catppuccin-frappe .label{color:#b0bef1;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-frappe .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-frappe .label.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-frappe .label.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .label.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-frappe .help.is-white{color:#fff}html.theme--catppuccin-frappe .help.is-black{color:#0a0a0a}html.theme--catppuccin-frappe .help.is-light{color:#f5f5f5}html.theme--catppuccin-frappe .help.is-dark,html.theme--catppuccin-frappe .content kbd.help{color:#414559}html.theme--catppuccin-frappe .help.is-primary,html.theme--catppuccin-frappe .docstring>section>a.help.docs-sourcelink{color:#8caaee}html.theme--catppuccin-frappe .help.is-link{color:#8caaee}html.theme--catppuccin-frappe .help.is-info{color:#81c8be}html.theme--catppuccin-frappe .help.is-success{color:#a6d189}html.theme--catppuccin-frappe .help.is-warning{color:#e5c890}html.theme--catppuccin-frappe .help.is-danger{color:#e78284}html.theme--catppuccin-frappe .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-frappe .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-frappe .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-frappe .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-frappe .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-frappe .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-frappe .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-frappe .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-frappe .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field.is-horizontal{display:flex}}html.theme--catppuccin-frappe .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-frappe .field-label.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-frappe .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-frappe .field-body .field{margin-bottom:0}html.theme--catppuccin-frappe .field-body>.field{flex-shrink:1}html.theme--catppuccin-frappe .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-frappe .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-frappe .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-frappe .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select:focus~.icon{color:#414559}html.theme--catppuccin-frappe .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-frappe .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-frappe .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-frappe .control.has-icons-left .icon,html.theme--catppuccin-frappe .control.has-icons-right .icon{color:#626880;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-frappe .control.has-icons-left .input,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-frappe .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-frappe .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-frappe .control.has-icons-right .input,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-frappe .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-frappe .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-frappe .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-frappe .control.is-loading.is-small:after,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-frappe .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-frappe .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-frappe .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-frappe .breadcrumb a{align-items:center;color:#8caaee;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-frappe .breadcrumb a:hover{color:#99d1db}html.theme--catppuccin-frappe .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-frappe .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-frappe .breadcrumb li.is-active a{color:#b0bef1;cursor:default;pointer-events:none}html.theme--catppuccin-frappe .breadcrumb li+li::before{color:#737994;content:"\0002f"}html.theme--catppuccin-frappe .breadcrumb ul,html.theme--catppuccin-frappe .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-frappe .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-frappe .breadcrumb.is-centered ol,html.theme--catppuccin-frappe .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-frappe .breadcrumb.is-right ol,html.theme--catppuccin-frappe .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-frappe .breadcrumb.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-frappe .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-frappe .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-frappe .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-frappe .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-frappe .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#c6d0f5;max-width:100%;position:relative}html.theme--catppuccin-frappe .card-footer:first-child,html.theme--catppuccin-frappe .card-content:first-child,html.theme--catppuccin-frappe .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-frappe .card-footer:last-child,html.theme--catppuccin-frappe .card-content:last-child,html.theme--catppuccin-frappe .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-frappe .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-frappe .card-header-title{align-items:center;color:#b0bef1;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-frappe .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-frappe .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-frappe .card-image{display:block;position:relative}html.theme--catppuccin-frappe .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-frappe .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-frappe .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-frappe .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-frappe .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-frappe .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-frappe .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-frappe .dropdown.is-active .dropdown-menu,html.theme--catppuccin-frappe .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-frappe .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-frappe .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-frappe .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-frappe .dropdown-content{background-color:#292c3c;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-frappe .dropdown-item{color:#c6d0f5;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-frappe a.dropdown-item,html.theme--catppuccin-frappe button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-frappe a.dropdown-item:hover,html.theme--catppuccin-frappe button.dropdown-item:hover{background-color:#292c3c;color:#0a0a0a}html.theme--catppuccin-frappe a.dropdown-item.is-active,html.theme--catppuccin-frappe button.dropdown-item.is-active{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-frappe .level{align-items:center;justify-content:space-between}html.theme--catppuccin-frappe .level code{border-radius:.4em}html.theme--catppuccin-frappe .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-frappe .level.is-mobile{display:flex}html.theme--catppuccin-frappe .level.is-mobile .level-left,html.theme--catppuccin-frappe .level.is-mobile .level-right{display:flex}html.theme--catppuccin-frappe .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-frappe .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-frappe .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level{display:flex}html.theme--catppuccin-frappe .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-frappe .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-frappe .level-item .title,html.theme--catppuccin-frappe .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-frappe .level-left,html.theme--catppuccin-frappe .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .level-left .level-item.is-flexible,html.theme--catppuccin-frappe .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-left .level-item:not(:last-child),html.theme--catppuccin-frappe .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-frappe .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-left{display:flex}}html.theme--catppuccin-frappe .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-right{display:flex}}html.theme--catppuccin-frappe .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-frappe .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-frappe .media .media{border-top:1px solid rgba(98,104,128,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-frappe .media .media .content:not(:last-child),html.theme--catppuccin-frappe .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-frappe .media .media .media{padding-top:.5rem}html.theme--catppuccin-frappe .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-frappe .media+.media{border-top:1px solid rgba(98,104,128,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-frappe .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-frappe .media-left,html.theme--catppuccin-frappe .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .media-left{margin-right:1rem}html.theme--catppuccin-frappe .media-right{margin-left:1rem}html.theme--catppuccin-frappe .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .media-content{overflow-x:auto}}html.theme--catppuccin-frappe .menu{font-size:1rem}html.theme--catppuccin-frappe .menu.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-frappe .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .menu.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .menu-list{line-height:1.25}html.theme--catppuccin-frappe .menu-list a{border-radius:3px;color:#c6d0f5;display:block;padding:0.5em 0.75em}html.theme--catppuccin-frappe .menu-list a:hover{background-color:#292c3c;color:#b0bef1}html.theme--catppuccin-frappe .menu-list a.is-active{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .menu-list li ul{border-left:1px solid #626880;margin:.75em;padding-left:.75em}html.theme--catppuccin-frappe .menu-label{color:#f1f4fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-frappe .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-frappe .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-frappe .message{background-color:#292c3c;border-radius:.4em;font-size:1rem}html.theme--catppuccin-frappe .message strong{color:currentColor}html.theme--catppuccin-frappe .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-frappe .message.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-frappe .message.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .message.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .message.is-white{background-color:#fff}html.theme--catppuccin-frappe .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-frappe .message.is-black{background-color:#fafafa}html.theme--catppuccin-frappe .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-frappe .message.is-light{background-color:#fafafa}html.theme--catppuccin-frappe .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-frappe .message.is-dark,html.theme--catppuccin-frappe .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-frappe .message.is-dark .message-header,html.theme--catppuccin-frappe .content kbd.message .message-header{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .message.is-dark .message-body,html.theme--catppuccin-frappe .content kbd.message .message-body{border-color:#414559}html.theme--catppuccin-frappe .message.is-primary,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink{background-color:#edf2fc}html.theme--catppuccin-frappe .message.is-primary .message-header,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink .message-header{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .message.is-primary .message-body,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink .message-body{border-color:#8caaee;color:#153a8e}html.theme--catppuccin-frappe .message.is-link{background-color:#edf2fc}html.theme--catppuccin-frappe .message.is-link .message-header{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .message.is-link .message-body{border-color:#8caaee;color:#153a8e}html.theme--catppuccin-frappe .message.is-info{background-color:#f1f9f8}html.theme--catppuccin-frappe .message.is-info .message-header{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-info .message-body{border-color:#81c8be;color:#2d675f}html.theme--catppuccin-frappe .message.is-success{background-color:#f4f9f0}html.theme--catppuccin-frappe .message.is-success .message-header{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-success .message-body{border-color:#a6d189;color:#446a29}html.theme--catppuccin-frappe .message.is-warning{background-color:#fbf7ee}html.theme--catppuccin-frappe .message.is-warning .message-header{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-warning .message-body{border-color:#e5c890;color:#78591c}html.theme--catppuccin-frappe .message.is-danger{background-color:#fceeee}html.theme--catppuccin-frappe .message.is-danger .message-header{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .message.is-danger .message-body{border-color:#e78284;color:#9a1e20}html.theme--catppuccin-frappe .message-header{align-items:center;background-color:#c6d0f5;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-frappe .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-frappe .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .message-body{border-color:#626880;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#c6d0f5;padding:1.25em 1.5em}html.theme--catppuccin-frappe .message-body code,html.theme--catppuccin-frappe .message-body pre{background-color:#fff}html.theme--catppuccin-frappe .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-frappe .modal.is-active{display:flex}html.theme--catppuccin-frappe .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-frappe .modal-content,html.theme--catppuccin-frappe .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-frappe .modal-content,html.theme--catppuccin-frappe .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-frappe .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-frappe .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-frappe .modal-card-head,html.theme--catppuccin-frappe .modal-card-foot{align-items:center;background-color:#292c3c;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-frappe .modal-card-head{border-bottom:1px solid #626880;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-frappe .modal-card-title{color:#c6d0f5;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-frappe .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #626880}html.theme--catppuccin-frappe .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-frappe .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#303446;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-frappe .navbar{background-color:#8caaee;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-frappe .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-frappe .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-frappe .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-dark,html.theme--catppuccin-frappe .content kbd.navbar{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-burger,html.theme--catppuccin-frappe .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#414559;color:#fff}}html.theme--catppuccin-frappe .navbar.is-primary,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-burger,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee;color:#fff}}html.theme--catppuccin-frappe .navbar.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee;color:#fff}}html.theme--catppuccin-frappe .navbar.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#81c8be;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6d189;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#e5c890;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#e78284;color:#fff}}html.theme--catppuccin-frappe .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-frappe .navbar.has-shadow{box-shadow:0 2px 0 0 #292c3c}html.theme--catppuccin-frappe .navbar.is-fixed-bottom,html.theme--catppuccin-frappe .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #292c3c}html.theme--catppuccin-frappe .navbar.is-fixed-top{top:0}html.theme--catppuccin-frappe html.has-navbar-fixed-top,html.theme--catppuccin-frappe body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-frappe .navbar-brand,html.theme--catppuccin-frappe .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-frappe .navbar-brand a.navbar-item:focus,html.theme--catppuccin-frappe .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-frappe .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-frappe .navbar-burger{color:#c6d0f5;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-frappe .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--catppuccin-frappe .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-frappe .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-frappe .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-frappe .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-frappe .navbar-menu{display:none}html.theme--catppuccin-frappe .navbar-item,html.theme--catppuccin-frappe .navbar-link{color:#c6d0f5;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-frappe .navbar-item .icon:only-child,html.theme--catppuccin-frappe .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-frappe a.navbar-item,html.theme--catppuccin-frappe .navbar-link{cursor:pointer}html.theme--catppuccin-frappe a.navbar-item:focus,html.theme--catppuccin-frappe a.navbar-item:focus-within,html.theme--catppuccin-frappe a.navbar-item:hover,html.theme--catppuccin-frappe a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar-link:focus,html.theme--catppuccin-frappe .navbar-link:focus-within,html.theme--catppuccin-frappe .navbar-link:hover,html.theme--catppuccin-frappe .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#8caaee}html.theme--catppuccin-frappe .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .navbar-item img{max-height:1.75rem}html.theme--catppuccin-frappe .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-frappe .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-frappe .navbar-item.is-tab:focus,html.theme--catppuccin-frappe .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#8caaee}html.theme--catppuccin-frappe .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#8caaee;border-bottom-style:solid;border-bottom-width:3px;color:#8caaee;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-frappe .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-frappe .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-frappe .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-frappe .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .navbar>.container{display:block}html.theme--catppuccin-frappe .navbar-brand .navbar-item,html.theme--catppuccin-frappe .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-frappe .navbar-link::after{display:none}html.theme--catppuccin-frappe .navbar-menu{background-color:#8caaee;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-frappe .navbar-menu.is-active{display:block}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch,html.theme--catppuccin-frappe .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-frappe .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-frappe .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-frappe html.has-navbar-fixed-top-touch,html.theme--catppuccin-frappe body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar,html.theme--catppuccin-frappe .navbar-menu,html.theme--catppuccin-frappe .navbar-start,html.theme--catppuccin-frappe .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-frappe .navbar{min-height:4rem}html.theme--catppuccin-frappe .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-frappe .navbar.is-spaced .navbar-start,html.theme--catppuccin-frappe .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-frappe .navbar.is-spaced a.navbar-item,html.theme--catppuccin-frappe .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#838ba7}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8caaee}html.theme--catppuccin-frappe .navbar-burger{display:none}html.theme--catppuccin-frappe .navbar-item,html.theme--catppuccin-frappe .navbar-link{align-items:center;display:flex}html.theme--catppuccin-frappe .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-frappe .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-frappe .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-frappe .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-frappe .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-frappe .navbar-dropdown{background-color:#8caaee;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-frappe .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#838ba7}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8caaee}.navbar.is-spaced html.theme--catppuccin-frappe .navbar-dropdown,html.theme--catppuccin-frappe .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-frappe .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-frappe .navbar-divider{display:block}html.theme--catppuccin-frappe .navbar>.container .navbar-brand,html.theme--catppuccin-frappe .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-frappe .navbar>.container .navbar-menu,html.theme--catppuccin-frappe .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-frappe .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-frappe html.has-navbar-fixed-top-desktop,html.theme--catppuccin-frappe body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-frappe html.has-spaced-navbar-fixed-top,html.theme--catppuccin-frappe body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-frappe html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-frappe body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-frappe a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar-link.is-active{color:#8caaee}html.theme--catppuccin-frappe a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-frappe .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-frappe .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-frappe .pagination.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-frappe .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .pagination.is-rounded .pagination-previous,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-frappe .pagination.is-rounded .pagination-next,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-frappe .pagination.is-rounded .pagination-link,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-frappe .pagination,html.theme--catppuccin-frappe .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link{border-color:#626880;color:#8caaee;min-width:2.5em}html.theme--catppuccin-frappe .pagination-previous:hover,html.theme--catppuccin-frappe .pagination-next:hover,html.theme--catppuccin-frappe .pagination-link:hover{border-color:#737994;color:#99d1db}html.theme--catppuccin-frappe .pagination-previous:focus,html.theme--catppuccin-frappe .pagination-next:focus,html.theme--catppuccin-frappe .pagination-link:focus{border-color:#737994}html.theme--catppuccin-frappe .pagination-previous:active,html.theme--catppuccin-frappe .pagination-next:active,html.theme--catppuccin-frappe .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-frappe .pagination-previous[disabled],html.theme--catppuccin-frappe .pagination-previous.is-disabled,html.theme--catppuccin-frappe .pagination-next[disabled],html.theme--catppuccin-frappe .pagination-next.is-disabled,html.theme--catppuccin-frappe .pagination-link[disabled],html.theme--catppuccin-frappe .pagination-link.is-disabled{background-color:#626880;border-color:#626880;box-shadow:none;color:#f1f4fd;opacity:0.5}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-frappe .pagination-link.is-current{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .pagination-ellipsis{color:#737994;pointer-events:none}html.theme--catppuccin-frappe .pagination-list{flex-wrap:wrap}html.theme--catppuccin-frappe .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .pagination{flex-wrap:wrap}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-frappe .pagination-previous{order:2}html.theme--catppuccin-frappe .pagination-next{order:3}html.theme--catppuccin-frappe .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-frappe .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-frappe .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-frappe .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-frappe .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-frappe .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-frappe .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-frappe .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-frappe .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-frappe .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-frappe .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-frappe .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-frappe .panel.is-dark .panel-heading,html.theme--catppuccin-frappe .content kbd.panel .panel-heading{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-frappe .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#414559}html.theme--catppuccin-frappe .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-frappe .content kbd.panel .panel-block.is-active .panel-icon{color:#414559}html.theme--catppuccin-frappe .panel.is-primary .panel-heading,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#8caaee}html.theme--catppuccin-frappe .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel.is-link .panel-heading{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .panel.is-link .panel-tabs a.is-active{border-bottom-color:#8caaee}html.theme--catppuccin-frappe .panel.is-link .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel.is-info .panel-heading{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-info .panel-tabs a.is-active{border-bottom-color:#81c8be}html.theme--catppuccin-frappe .panel.is-info .panel-block.is-active .panel-icon{color:#81c8be}html.theme--catppuccin-frappe .panel.is-success .panel-heading{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6d189}html.theme--catppuccin-frappe .panel.is-success .panel-block.is-active .panel-icon{color:#a6d189}html.theme--catppuccin-frappe .panel.is-warning .panel-heading{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#e5c890}html.theme--catppuccin-frappe .panel.is-warning .panel-block.is-active .panel-icon{color:#e5c890}html.theme--catppuccin-frappe .panel.is-danger .panel-heading{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#e78284}html.theme--catppuccin-frappe .panel.is-danger .panel-block.is-active .panel-icon{color:#e78284}html.theme--catppuccin-frappe .panel-tabs:not(:last-child),html.theme--catppuccin-frappe .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-frappe .panel-heading{background-color:#51576d;border-radius:8px 8px 0 0;color:#b0bef1;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-frappe .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-frappe .panel-tabs a{border-bottom:1px solid #626880;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-frappe .panel-tabs a.is-active{border-bottom-color:#51576d;color:#769aeb}html.theme--catppuccin-frappe .panel-list a{color:#c6d0f5}html.theme--catppuccin-frappe .panel-list a:hover{color:#8caaee}html.theme--catppuccin-frappe .panel-block{align-items:center;color:#b0bef1;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-frappe .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-frappe .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-frappe .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-frappe .panel-block.is-active{border-left-color:#8caaee;color:#769aeb}html.theme--catppuccin-frappe .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-frappe a.panel-block,html.theme--catppuccin-frappe label.panel-block{cursor:pointer}html.theme--catppuccin-frappe a.panel-block:hover,html.theme--catppuccin-frappe label.panel-block:hover{background-color:#292c3c}html.theme--catppuccin-frappe .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f1f4fd;margin-right:.75em}html.theme--catppuccin-frappe .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-frappe .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--catppuccin-frappe .tabs a{align-items:center;border-bottom-color:#626880;border-bottom-style:solid;border-bottom-width:1px;color:#c6d0f5;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-frappe .tabs a:hover{border-bottom-color:#b0bef1;color:#b0bef1}html.theme--catppuccin-frappe .tabs li{display:block}html.theme--catppuccin-frappe .tabs li.is-active a{border-bottom-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .tabs ul{align-items:center;border-bottom-color:#626880;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-frappe .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-frappe .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-frappe .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-frappe .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-frappe .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-frappe .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-frappe .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-frappe .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-frappe .tabs.is-boxed a:hover{background-color:#292c3c;border-bottom-color:#626880}html.theme--catppuccin-frappe .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#626880;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-frappe .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .tabs.is-toggle a{border-color:#626880;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-frappe .tabs.is-toggle a:hover{background-color:#292c3c;border-color:#737994;z-index:2}html.theme--catppuccin-frappe .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-frappe .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-frappe .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-frappe .tabs.is-toggle li.is-active a{background-color:#8caaee;border-color:#8caaee;color:#fff;z-index:1}html.theme--catppuccin-frappe .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-frappe .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-frappe .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-frappe .tabs.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-frappe .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .column.is-narrow,html.theme--catppuccin-frappe .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full,html.theme--catppuccin-frappe .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters,html.theme--catppuccin-frappe .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds,html.theme--catppuccin-frappe .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half,html.theme--catppuccin-frappe .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third,html.theme--catppuccin-frappe .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter,html.theme--catppuccin-frappe .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth,html.theme--catppuccin-frappe .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths,html.theme--catppuccin-frappe .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths,html.theme--catppuccin-frappe .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths,html.theme--catppuccin-frappe .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters,html.theme--catppuccin-frappe .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds,html.theme--catppuccin-frappe .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half,html.theme--catppuccin-frappe .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third,html.theme--catppuccin-frappe .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter,html.theme--catppuccin-frappe .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth,html.theme--catppuccin-frappe .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths,html.theme--catppuccin-frappe .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths,html.theme--catppuccin-frappe .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths,html.theme--catppuccin-frappe .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-frappe .column.is-0,html.theme--catppuccin-frappe .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0,html.theme--catppuccin-frappe .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-frappe .column.is-1,html.theme--catppuccin-frappe .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1,html.theme--catppuccin-frappe .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2,html.theme--catppuccin-frappe .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2,html.theme--catppuccin-frappe .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3,html.theme--catppuccin-frappe .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3,html.theme--catppuccin-frappe .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-frappe .column.is-4,html.theme--catppuccin-frappe .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4,html.theme--catppuccin-frappe .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5,html.theme--catppuccin-frappe .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5,html.theme--catppuccin-frappe .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6,html.theme--catppuccin-frappe .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6,html.theme--catppuccin-frappe .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-frappe .column.is-7,html.theme--catppuccin-frappe .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7,html.theme--catppuccin-frappe .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8,html.theme--catppuccin-frappe .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8,html.theme--catppuccin-frappe .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9,html.theme--catppuccin-frappe .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9,html.theme--catppuccin-frappe .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-frappe .column.is-10,html.theme--catppuccin-frappe .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10,html.theme--catppuccin-frappe .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11,html.theme--catppuccin-frappe .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11,html.theme--catppuccin-frappe .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12,html.theme--catppuccin-frappe .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12,html.theme--catppuccin-frappe .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-frappe .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-frappe .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-frappe .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-frappe .columns.is-centered{justify-content:center}html.theme--catppuccin-frappe .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-frappe .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-frappe .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-frappe .columns.is-mobile{display:flex}html.theme--catppuccin-frappe .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-frappe .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-desktop{display:flex}}html.theme--catppuccin-frappe .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-frappe .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-frappe .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-frappe .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-frappe .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-frappe .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-frappe .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-frappe .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-frappe .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-frappe .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-frappe .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-frappe .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-frappe .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-frappe .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-frappe .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-frappe .tile.is-child{margin:0 !important}html.theme--catppuccin-frappe .tile.is-parent{padding:.75rem}html.theme--catppuccin-frappe .tile.is-vertical{flex-direction:column}html.theme--catppuccin-frappe .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .tile:not(.is-child){display:flex}html.theme--catppuccin-frappe .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .tile.is-3{flex:none;width:25%}html.theme--catppuccin-frappe .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .tile.is-6{flex:none;width:50%}html.theme--catppuccin-frappe .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .tile.is-9{flex:none;width:75%}html.theme--catppuccin-frappe .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-frappe .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-frappe .hero .navbar{background:none}html.theme--catppuccin-frappe .hero .tabs ul{border-bottom:none}html.theme--catppuccin-frappe .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-white strong{color:inherit}html.theme--catppuccin-frappe .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-frappe .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-frappe .hero.is-white .navbar-item,html.theme--catppuccin-frappe .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-frappe .hero.is-white a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-white .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-frappe .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-frappe .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-black strong{color:inherit}html.theme--catppuccin-frappe .hero.is-black .title{color:#fff}html.theme--catppuccin-frappe .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-frappe .hero.is-black .navbar-item,html.theme--catppuccin-frappe .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-black a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-black .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-frappe .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-light strong{color:inherit}html.theme--catppuccin-frappe .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-frappe .hero.is-light .navbar-item,html.theme--catppuccin-frappe .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-light .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-frappe .hero.is-dark,html.theme--catppuccin-frappe .content kbd.hero{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-dark strong,html.theme--catppuccin-frappe .content kbd.hero strong{color:inherit}html.theme--catppuccin-frappe .hero.is-dark .title,html.theme--catppuccin-frappe .content kbd.hero .title{color:#fff}html.theme--catppuccin-frappe .hero.is-dark .subtitle,html.theme--catppuccin-frappe .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-frappe .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-dark .subtitle strong,html.theme--catppuccin-frappe .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-dark .navbar-menu,html.theme--catppuccin-frappe .content kbd.hero .navbar-menu{background-color:#414559}}html.theme--catppuccin-frappe .hero.is-dark .navbar-item,html.theme--catppuccin-frappe .content kbd.hero .navbar-item,html.theme--catppuccin-frappe .hero.is-dark .navbar-link,html.theme--catppuccin-frappe .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-dark .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.hero .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.hero .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .hero.is-dark .tabs a,html.theme--catppuccin-frappe .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-dark .tabs a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs li.is-active a{color:#414559 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#414559}html.theme--catppuccin-frappe .hero.is-dark.is-bold,html.theme--catppuccin-frappe .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #262f41 0%, #414559 71%, #47476c 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-frappe .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #262f41 0%, #414559 71%, #47476c 100%)}}html.theme--catppuccin-frappe .hero.is-primary,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-primary strong,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-frappe .hero.is-primary .title,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-frappe .hero.is-primary .subtitle,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-primary .subtitle strong,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-primary .navbar-menu,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#8caaee}}html.theme--catppuccin-frappe .hero.is-primary .navbar-item,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-frappe .hero.is-primary .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-primary .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .hero.is-primary .tabs a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-primary .tabs a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#8caaee !important;opacity:1}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .hero.is-primary.is-bold,html.theme--catppuccin-frappe .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-frappe .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}}html.theme--catppuccin-frappe .hero.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-link strong{color:inherit}html.theme--catppuccin-frappe .hero.is-link .title{color:#fff}html.theme--catppuccin-frappe .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-link .navbar-menu{background-color:#8caaee}}html.theme--catppuccin-frappe .hero.is-link .navbar-item,html.theme--catppuccin-frappe .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-link a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-link .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-link .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-link .tabs li.is-active a{color:#8caaee !important;opacity:1}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .hero.is-link.is-bold{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}}html.theme--catppuccin-frappe .hero.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-info strong{color:inherit}html.theme--catppuccin-frappe .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-info .navbar-menu{background-color:#81c8be}}html.theme--catppuccin-frappe .hero.is-info .navbar-item,html.theme--catppuccin-frappe .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-info .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-info .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-info .tabs li.is-active a{color:#81c8be !important;opacity:1}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .hero.is-info.is-bold{background-image:linear-gradient(141deg, #52c4a1 0%, #81c8be 71%, #8fd2d4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #52c4a1 0%, #81c8be 71%, #8fd2d4 100%)}}html.theme--catppuccin-frappe .hero.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-success strong{color:inherit}html.theme--catppuccin-frappe .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-success .navbar-menu{background-color:#a6d189}}html.theme--catppuccin-frappe .hero.is-success .navbar-item,html.theme--catppuccin-frappe .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-success .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-success .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-success .tabs li.is-active a{color:#a6d189 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .hero.is-success.is-bold{background-image:linear-gradient(141deg, #9ccd5a 0%, #a6d189 71%, #a8dc98 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #9ccd5a 0%, #a6d189 71%, #a8dc98 100%)}}html.theme--catppuccin-frappe .hero.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-warning strong{color:inherit}html.theme--catppuccin-frappe .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-warning .navbar-menu{background-color:#e5c890}}html.theme--catppuccin-frappe .hero.is-warning .navbar-item,html.theme--catppuccin-frappe .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-warning .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-warning .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-warning .tabs li.is-active a{color:#e5c890 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #e5a05d 0%, #e5c890 71%, #ede0a2 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e5a05d 0%, #e5c890 71%, #ede0a2 100%)}}html.theme--catppuccin-frappe .hero.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-danger strong{color:inherit}html.theme--catppuccin-frappe .hero.is-danger .title{color:#fff}html.theme--catppuccin-frappe .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-danger .navbar-menu{background-color:#e78284}}html.theme--catppuccin-frappe .hero.is-danger .navbar-item,html.theme--catppuccin-frappe .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-danger .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-danger .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-danger .tabs li.is-active a{color:#e78284 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#e78284}html.theme--catppuccin-frappe .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #e94d6a 0%, #e78284 71%, #eea294 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e94d6a 0%, #e78284 71%, #eea294 100%)}}html.theme--catppuccin-frappe .hero.is-small .hero-body,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-frappe .hero.is-halfheight .hero-body,html.theme--catppuccin-frappe .hero.is-fullheight .hero-body,html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-frappe .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-frappe .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-frappe .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-frappe .hero-video{overflow:hidden}html.theme--catppuccin-frappe .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-frappe .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero-video{display:none}}html.theme--catppuccin-frappe .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero-buttons .button{display:flex}html.theme--catppuccin-frappe .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-frappe .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-frappe .hero-head,html.theme--catppuccin-frappe .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero-body{padding:3rem 3rem}}html.theme--catppuccin-frappe .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .section{padding:3rem 3rem}html.theme--catppuccin-frappe .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-frappe .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-frappe .footer{background-color:#292c3c;padding:3rem 1.5rem 6rem}html.theme--catppuccin-frappe h1 .docs-heading-anchor,html.theme--catppuccin-frappe h1 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h1 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h2 .docs-heading-anchor,html.theme--catppuccin-frappe h2 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h2 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h3 .docs-heading-anchor,html.theme--catppuccin-frappe h3 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h3 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h4 .docs-heading-anchor,html.theme--catppuccin-frappe h4 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h4 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h5 .docs-heading-anchor,html.theme--catppuccin-frappe h5 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h5 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h6 .docs-heading-anchor,html.theme--catppuccin-frappe h6 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h6 .docs-heading-anchor:visited{color:#c6d0f5}html.theme--catppuccin-frappe h1 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h2 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h3 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h4 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h5 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-frappe h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-frappe h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-frappe .docs-light-only{display:none !important}html.theme--catppuccin-frappe pre{position:relative;overflow:hidden}html.theme--catppuccin-frappe pre code,html.theme--catppuccin-frappe pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-frappe pre code:first-of-type,html.theme--catppuccin-frappe pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-frappe pre code:last-of-type,html.theme--catppuccin-frappe pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-frappe pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#c6d0f5;cursor:pointer;text-align:center}html.theme--catppuccin-frappe pre .copy-button:focus,html.theme--catppuccin-frappe pre .copy-button:hover{opacity:1;background:rgba(198,208,245,0.1);color:#8caaee}html.theme--catppuccin-frappe pre .copy-button.success{color:#a6d189;opacity:1}html.theme--catppuccin-frappe pre .copy-button.error{color:#e78284;opacity:1}html.theme--catppuccin-frappe pre:hover .copy-button{opacity:1}html.theme--catppuccin-frappe .admonition{background-color:#292c3c;border-style:solid;border-width:2px;border-color:#b5bfe2;border-radius:4px;font-size:1rem}html.theme--catppuccin-frappe .admonition strong{color:currentColor}html.theme--catppuccin-frappe .admonition.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-frappe .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .admonition.is-default{background-color:#292c3c;border-color:#b5bfe2}html.theme--catppuccin-frappe .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#b5bfe2}html.theme--catppuccin-frappe .admonition.is-default>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-info{background-color:#292c3c;border-color:#81c8be}html.theme--catppuccin-frappe .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#81c8be}html.theme--catppuccin-frappe .admonition.is-info>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-success{background-color:#292c3c;border-color:#a6d189}html.theme--catppuccin-frappe .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6d189}html.theme--catppuccin-frappe .admonition.is-success>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-warning{background-color:#292c3c;border-color:#e5c890}html.theme--catppuccin-frappe .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#e5c890}html.theme--catppuccin-frappe .admonition.is-warning>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-danger{background-color:#292c3c;border-color:#e78284}html.theme--catppuccin-frappe .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#e78284}html.theme--catppuccin-frappe .admonition.is-danger>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-compat{background-color:#292c3c;border-color:#99d1db}html.theme--catppuccin-frappe .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#99d1db}html.theme--catppuccin-frappe .admonition.is-compat>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition-header{color:#b5bfe2;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-frappe .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-frappe details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-frappe details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-frappe details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-frappe .admonition-body{color:#c6d0f5;padding:0.5rem .75rem}html.theme--catppuccin-frappe .admonition-body pre{background-color:#292c3c}html.theme--catppuccin-frappe .admonition-body code{background-color:#292c3c}html.theme--catppuccin-frappe .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #626880;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-frappe .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#292c3c;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #626880;overflow:auto}html.theme--catppuccin-frappe .docstring>header code{background-color:transparent}html.theme--catppuccin-frappe .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-frappe .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-frappe .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-frappe .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #626880}html.theme--catppuccin-frappe .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-frappe .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-frappe .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-frappe .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-frappe .documenter-example-output{background-color:#303446}html.theme--catppuccin-frappe .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#292c3c;color:#c6d0f5;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-frappe .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-frappe .outdated-warning-overlay a{color:#8caaee}html.theme--catppuccin-frappe .outdated-warning-overlay a:hover{color:#99d1db}html.theme--catppuccin-frappe .content pre{border:2px solid #626880;border-radius:4px}html.theme--catppuccin-frappe .content code{font-weight:inherit}html.theme--catppuccin-frappe .content a code{color:#8caaee}html.theme--catppuccin-frappe .content a:hover code{color:#99d1db}html.theme--catppuccin-frappe .content h1 code,html.theme--catppuccin-frappe .content h2 code,html.theme--catppuccin-frappe .content h3 code,html.theme--catppuccin-frappe .content h4 code,html.theme--catppuccin-frappe .content h5 code,html.theme--catppuccin-frappe .content h6 code{color:#c6d0f5}html.theme--catppuccin-frappe .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-frappe .content blockquote>ul:first-child,html.theme--catppuccin-frappe .content blockquote>ol:first-child,html.theme--catppuccin-frappe .content .admonition-body>ul:first-child,html.theme--catppuccin-frappe .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-frappe pre,html.theme--catppuccin-frappe code{font-variant-ligatures:no-contextual}html.theme--catppuccin-frappe .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-frappe .breadcrumb a.is-disabled,html.theme--catppuccin-frappe .breadcrumb a.is-disabled:hover{color:#b0bef1}html.theme--catppuccin-frappe .hljs{background:initial !important}html.theme--catppuccin-frappe .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-frappe .katex-display,html.theme--catppuccin-frappe mjx-container,html.theme--catppuccin-frappe .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-frappe html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-frappe li.no-marker{list-style:none}html.theme--catppuccin-frappe #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-frappe #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main{width:100%}html.theme--catppuccin-frappe #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-frappe #documenter .docs-main>header,html.theme--catppuccin-frappe #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar{background-color:#303446;border-bottom:1px solid #626880;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-frappe #documenter .docs-main section.footnotes{border-top:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-frappe .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #626880;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-frappe #documenter .docs-sidebar{display:flex;flex-direction:column;color:#c6d0f5;background-color:#292c3c;border-right:1px solid #626880;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-frappe #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name a:hover{color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #626880;display:none;padding:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #626880;padding-bottom:1.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#c6d0f5;background:#292c3c}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#c6d0f5;background-color:#313548}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #626880;border-bottom:1px solid #626880;background-color:#232634}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#232634;color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#313548;color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-frappe #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3a3e54}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4a506c}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3a3e54}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4a506c}}html.theme--catppuccin-frappe kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-frappe .search-min-width-50{min-width:50%}html.theme--catppuccin-frappe .search-min-height-100{min-height:100%}html.theme--catppuccin-frappe .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-frappe .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover,html.theme--catppuccin-frappe .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-frappe .search-result-link .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-frappe .property-search-result-badge,html.theme--catppuccin-frappe .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-frappe .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:hover .search-filter,html.theme--catppuccin-frappe .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-frappe .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-frappe .search-filter:hover,html.theme--catppuccin-frappe .search-filter:focus{color:#333}html.theme--catppuccin-frappe .search-filter-selected{color:#414559;background-color:#babbf1}html.theme--catppuccin-frappe .search-filter-selected:hover,html.theme--catppuccin-frappe .search-filter-selected:focus{color:#414559}html.theme--catppuccin-frappe .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-frappe .search-divider{border-bottom:1px solid #626880}html.theme--catppuccin-frappe .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-frappe .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-frappe .w-100{width:100%}html.theme--catppuccin-frappe .gap-2{gap:0.5rem}html.theme--catppuccin-frappe .gap-4{gap:1rem}html.theme--catppuccin-frappe .gap-8{gap:2rem}html.theme--catppuccin-frappe{background-color:#303446;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-frappe a{transition:all 200ms ease}html.theme--catppuccin-frappe .label{color:#c6d0f5}html.theme--catppuccin-frappe .button,html.theme--catppuccin-frappe .control.has-icons-left .icon,html.theme--catppuccin-frappe .control.has-icons-right .icon,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .select,html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea{height:2.5em;color:#c6d0f5}html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#c6d0f5}html.theme--catppuccin-frappe .select:after,html.theme--catppuccin-frappe .select select{border-width:1px}html.theme--catppuccin-frappe .menu-list a{transition:all 300ms ease}html.theme--catppuccin-frappe .modal-card-foot,html.theme--catppuccin-frappe .modal-card-head{border-color:#626880}html.theme--catppuccin-frappe .navbar{border-radius:.4em}html.theme--catppuccin-frappe .navbar.is-transparent{background:none}html.theme--catppuccin-frappe .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .navbar .navbar-menu{background-color:#8caaee;border-radius:0 0 .4em .4em}}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){color:#414559}html.theme--catppuccin-frappe .tag.is-link:not(body),html.theme--catppuccin-frappe .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-frappe .content kbd.is-link:not(body){color:#414559}html.theme--catppuccin-frappe .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-frappe .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-frappe .ansi span.sgr3{font-style:italic}html.theme--catppuccin-frappe .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-frappe .ansi span.sgr7{color:#303446;background-color:#c6d0f5}html.theme--catppuccin-frappe .ansi span.sgr8{color:transparent}html.theme--catppuccin-frappe .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-frappe .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-frappe .ansi span.sgr30{color:#51576d}html.theme--catppuccin-frappe .ansi span.sgr31{color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr32{color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr33{color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr34{color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr35{color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr36{color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr37{color:#b5bfe2}html.theme--catppuccin-frappe .ansi span.sgr40{background-color:#51576d}html.theme--catppuccin-frappe .ansi span.sgr41{background-color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr42{background-color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr43{background-color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr44{background-color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr45{background-color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr46{background-color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr47{background-color:#b5bfe2}html.theme--catppuccin-frappe .ansi span.sgr90{color:#626880}html.theme--catppuccin-frappe .ansi span.sgr91{color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr92{color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr93{color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr94{color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr95{color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr96{color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr97{color:#a5adce}html.theme--catppuccin-frappe .ansi span.sgr100{background-color:#626880}html.theme--catppuccin-frappe .ansi span.sgr101{background-color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr102{background-color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr103{background-color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr104{background-color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr105{background-color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr106{background-color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr107{background-color:#a5adce}html.theme--catppuccin-frappe code.language-julia-repl>span.hljs-meta{color:#a6d189;font-weight:bolder}html.theme--catppuccin-frappe code .hljs{color:#c6d0f5;background:#303446}html.theme--catppuccin-frappe code .hljs-keyword{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-built_in{color:#e78284}html.theme--catppuccin-frappe code .hljs-type{color:#e5c890}html.theme--catppuccin-frappe code .hljs-literal{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-number{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-operator{color:#81c8be}html.theme--catppuccin-frappe code .hljs-punctuation{color:#b5bfe2}html.theme--catppuccin-frappe code .hljs-property{color:#81c8be}html.theme--catppuccin-frappe code .hljs-regexp{color:#f4b8e4}html.theme--catppuccin-frappe code .hljs-string{color:#a6d189}html.theme--catppuccin-frappe code .hljs-char.escape_{color:#a6d189}html.theme--catppuccin-frappe code .hljs-subst{color:#a5adce}html.theme--catppuccin-frappe code .hljs-symbol{color:#eebebe}html.theme--catppuccin-frappe code .hljs-variable{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-variable.language_{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-variable.constant_{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-title{color:#8caaee}html.theme--catppuccin-frappe code .hljs-title.class_{color:#e5c890}html.theme--catppuccin-frappe code .hljs-title.function_{color:#8caaee}html.theme--catppuccin-frappe code .hljs-params{color:#c6d0f5}html.theme--catppuccin-frappe code .hljs-comment{color:#626880}html.theme--catppuccin-frappe code .hljs-doctag{color:#e78284}html.theme--catppuccin-frappe code .hljs-meta{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-section{color:#8caaee}html.theme--catppuccin-frappe code .hljs-tag{color:#a5adce}html.theme--catppuccin-frappe code .hljs-name{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-attr{color:#8caaee}html.theme--catppuccin-frappe code .hljs-attribute{color:#a6d189}html.theme--catppuccin-frappe code .hljs-bullet{color:#81c8be}html.theme--catppuccin-frappe code .hljs-code{color:#a6d189}html.theme--catppuccin-frappe code .hljs-emphasis{color:#e78284;font-style:italic}html.theme--catppuccin-frappe code .hljs-strong{color:#e78284;font-weight:bold}html.theme--catppuccin-frappe code .hljs-formula{color:#81c8be}html.theme--catppuccin-frappe code .hljs-link{color:#85c1dc;font-style:italic}html.theme--catppuccin-frappe code .hljs-quote{color:#a6d189;font-style:italic}html.theme--catppuccin-frappe code .hljs-selector-tag{color:#e5c890}html.theme--catppuccin-frappe code .hljs-selector-id{color:#8caaee}html.theme--catppuccin-frappe code .hljs-selector-class{color:#81c8be}html.theme--catppuccin-frappe code .hljs-selector-attr{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-selector-pseudo{color:#81c8be}html.theme--catppuccin-frappe code .hljs-template-tag{color:#eebebe}html.theme--catppuccin-frappe code .hljs-template-variable{color:#eebebe}html.theme--catppuccin-frappe code .hljs-addition{color:#a6d189;background:rgba(166,227,161,0.15)}html.theme--catppuccin-frappe code .hljs-deletion{color:#e78284;background:rgba(243,139,168,0.15)}html.theme--catppuccin-frappe .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover,html.theme--catppuccin-frappe .search-result-link:focus{background-color:#414559}html.theme--catppuccin-frappe .search-result-link .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:hover .search-filter,html.theme--catppuccin-frappe .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:focus .search-filter{color:#414559 !important;background-color:#babbf1 !important}html.theme--catppuccin-frappe .search-result-title{color:#c6d0f5}html.theme--catppuccin-frappe .search-result-highlight{background-color:#e78284;color:#292c3c}html.theme--catppuccin-frappe .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-frappe .w-100{width:100%}html.theme--catppuccin-frappe .gap-2{gap:0.5rem}html.theme--catppuccin-frappe .gap-4{gap:1rem} diff --git a/dev/assets/themes/catppuccin-latte.css b/dev/assets/themes/catppuccin-latte.css new file mode 100644 index 00000000..ca172b63 --- /dev/null +++ b/dev/assets/themes/catppuccin-latte.css @@ -0,0 +1 @@ +html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-latte .pagination-previous:focus,html.theme--catppuccin-latte .pagination-next:focus,html.theme--catppuccin-latte .pagination-link:focus,html.theme--catppuccin-latte .pagination-ellipsis:focus,html.theme--catppuccin-latte .file-cta:focus,html.theme--catppuccin-latte .file-name:focus,html.theme--catppuccin-latte .select select:focus,html.theme--catppuccin-latte .textarea:focus,html.theme--catppuccin-latte .input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-latte .button:focus,html.theme--catppuccin-latte .is-focused.pagination-previous,html.theme--catppuccin-latte .is-focused.pagination-next,html.theme--catppuccin-latte .is-focused.pagination-link,html.theme--catppuccin-latte .is-focused.pagination-ellipsis,html.theme--catppuccin-latte .is-focused.file-cta,html.theme--catppuccin-latte .is-focused.file-name,html.theme--catppuccin-latte .select select.is-focused,html.theme--catppuccin-latte .is-focused.textarea,html.theme--catppuccin-latte .is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-focused.button,html.theme--catppuccin-latte .pagination-previous:active,html.theme--catppuccin-latte .pagination-next:active,html.theme--catppuccin-latte .pagination-link:active,html.theme--catppuccin-latte .pagination-ellipsis:active,html.theme--catppuccin-latte .file-cta:active,html.theme--catppuccin-latte .file-name:active,html.theme--catppuccin-latte .select select:active,html.theme--catppuccin-latte .textarea:active,html.theme--catppuccin-latte .input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-latte .button:active,html.theme--catppuccin-latte .is-active.pagination-previous,html.theme--catppuccin-latte .is-active.pagination-next,html.theme--catppuccin-latte .is-active.pagination-link,html.theme--catppuccin-latte .is-active.pagination-ellipsis,html.theme--catppuccin-latte .is-active.file-cta,html.theme--catppuccin-latte .is-active.file-name,html.theme--catppuccin-latte .select select.is-active,html.theme--catppuccin-latte .is-active.textarea,html.theme--catppuccin-latte .is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .is-active.button{outline:none}html.theme--catppuccin-latte .pagination-previous[disabled],html.theme--catppuccin-latte .pagination-next[disabled],html.theme--catppuccin-latte .pagination-link[disabled],html.theme--catppuccin-latte .pagination-ellipsis[disabled],html.theme--catppuccin-latte .file-cta[disabled],html.theme--catppuccin-latte .file-name[disabled],html.theme--catppuccin-latte .select select[disabled],html.theme--catppuccin-latte .textarea[disabled],html.theme--catppuccin-latte .input[disabled],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-latte .button[disabled],fieldset[disabled] html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-latte .select select,fieldset[disabled] html.theme--catppuccin-latte .textarea,fieldset[disabled] html.theme--catppuccin-latte .input,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte fieldset[disabled] .select select,html.theme--catppuccin-latte .select fieldset[disabled] select,html.theme--catppuccin-latte fieldset[disabled] .textarea,html.theme--catppuccin-latte fieldset[disabled] .input,html.theme--catppuccin-latte fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-latte .button,html.theme--catppuccin-latte fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-latte .tabs,html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .breadcrumb,html.theme--catppuccin-latte .file,html.theme--catppuccin-latte .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-latte .admonition:not(:last-child),html.theme--catppuccin-latte .tabs:not(:last-child),html.theme--catppuccin-latte .pagination:not(:last-child),html.theme--catppuccin-latte .message:not(:last-child),html.theme--catppuccin-latte .level:not(:last-child),html.theme--catppuccin-latte .breadcrumb:not(:last-child),html.theme--catppuccin-latte .block:not(:last-child),html.theme--catppuccin-latte .title:not(:last-child),html.theme--catppuccin-latte .subtitle:not(:last-child),html.theme--catppuccin-latte .table-container:not(:last-child),html.theme--catppuccin-latte .table:not(:last-child),html.theme--catppuccin-latte .progress:not(:last-child),html.theme--catppuccin-latte .notification:not(:last-child),html.theme--catppuccin-latte .content:not(:last-child),html.theme--catppuccin-latte .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .modal-close,html.theme--catppuccin-latte .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-latte .modal-close::before,html.theme--catppuccin-latte .delete::before,html.theme--catppuccin-latte .modal-close::after,html.theme--catppuccin-latte .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-latte .modal-close::before,html.theme--catppuccin-latte .delete::before{height:2px;width:50%}html.theme--catppuccin-latte .modal-close::after,html.theme--catppuccin-latte .delete::after{height:50%;width:2px}html.theme--catppuccin-latte .modal-close:hover,html.theme--catppuccin-latte .delete:hover,html.theme--catppuccin-latte .modal-close:focus,html.theme--catppuccin-latte .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-latte .modal-close:active,html.theme--catppuccin-latte .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-latte .is-small.modal-close,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-latte .is-small.delete,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-latte .is-medium.modal-close,html.theme--catppuccin-latte .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-latte .is-large.modal-close,html.theme--catppuccin-latte .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-latte .control.is-loading::after,html.theme--catppuccin-latte .select.is-loading::after,html.theme--catppuccin-latte .loader,html.theme--catppuccin-latte .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #8c8fa1;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-latte .hero-video,html.theme--catppuccin-latte .modal-background,html.theme--catppuccin-latte .modal,html.theme--catppuccin-latte .image.is-square img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-latte .image.is-square .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-latte .image.is-1by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-latte .image.is-1by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-latte .image.is-5by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-latte .image.is-5by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-latte .image.is-4by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-latte .image.is-4by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-latte .image.is-3by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-latte .image.is-5by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-latte .image.is-5by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-latte .image.is-16by9 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-latte .image.is-16by9 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-latte .image.is-2by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-latte .image.is-2by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-latte .image.is-3by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-latte .image.is-3by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-latte .image.is-4by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-latte .image.is-4by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-latte .image.is-3by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-latte .image.is-3by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-latte .image.is-2by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-latte .image.is-2by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-latte .image.is-3by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-latte .image.is-9by16 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-latte .image.is-9by16 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-latte .image.is-1by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-latte .image.is-1by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-latte .image.is-1by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-latte .image.is-1by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-latte .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#ccd0da !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#aeb5c5 !important}.has-background-dark{background-color:#ccd0da !important}.has-text-primary{color:#1e66f5 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#0a4ed6 !important}.has-background-primary{background-color:#1e66f5 !important}.has-text-primary-light{color:#ebf2fe !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bbd1fc !important}.has-background-primary-light{background-color:#ebf2fe !important}.has-text-primary-dark{color:#0a52e1 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#286df5 !important}.has-background-primary-dark{background-color:#0a52e1 !important}.has-text-link{color:#1e66f5 !important}a.has-text-link:hover,a.has-text-link:focus{color:#0a4ed6 !important}.has-background-link{background-color:#1e66f5 !important}.has-text-link-light{color:#ebf2fe !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bbd1fc !important}.has-background-link-light{background-color:#ebf2fe !important}.has-text-link-dark{color:#0a52e1 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#286df5 !important}.has-background-link-dark{background-color:#0a52e1 !important}.has-text-info{color:#179299 !important}a.has-text-info:hover,a.has-text-info:focus{color:#10686d !important}.has-background-info{background-color:#179299 !important}.has-text-info-light{color:#edfcfc !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c1f3f6 !important}.has-background-info-light{background-color:#edfcfc !important}.has-text-info-dark{color:#1cb2ba !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#2ad5df !important}.has-background-info-dark{background-color:#1cb2ba !important}.has-text-success{color:#40a02b !important}a.has-text-success:hover,a.has-text-success:focus{color:#307820 !important}.has-background-success{background-color:#40a02b !important}.has-text-success-light{color:#f1fbef !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#cef0c7 !important}.has-background-success-light{background-color:#f1fbef !important}.has-text-success-dark{color:#40a12b !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#50c936 !important}.has-background-success-dark{background-color:#40a12b !important}.has-text-warning{color:#df8e1d !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#b27117 !important}.has-background-warning{background-color:#df8e1d !important}.has-text-warning-light{color:#fdf6ed !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f7e0c0 !important}.has-background-warning-light{background-color:#fdf6ed !important}.has-text-warning-dark{color:#9e6515 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#cb811a !important}.has-background-warning-dark{background-color:#9e6515 !important}.has-text-danger{color:#d20f39 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a20c2c !important}.has-background-danger{background-color:#d20f39 !important}.has-text-danger-light{color:#feecf0 !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fabcca !important}.has-background-danger-light{background-color:#feecf0 !important}.has-text-danger-dark{color:#e9113f !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f13c63 !important}.has-background-danger-dark{background-color:#e9113f !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#ccd0da !important}.has-background-grey-darker{background-color:#ccd0da !important}.has-text-grey-dark{color:#bcc0cc !important}.has-background-grey-dark{background-color:#bcc0cc !important}.has-text-grey{color:#acb0be !important}.has-background-grey{background-color:#acb0be !important}.has-text-grey-light{color:#9ca0b0 !important}.has-background-grey-light{background-color:#9ca0b0 !important}.has-text-grey-lighter{color:#8c8fa1 !important}.has-background-grey-lighter{background-color:#8c8fa1 !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--catppuccin-latte html{background-color:#eff1f5;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-latte article,html.theme--catppuccin-latte aside,html.theme--catppuccin-latte figure,html.theme--catppuccin-latte footer,html.theme--catppuccin-latte header,html.theme--catppuccin-latte hgroup,html.theme--catppuccin-latte section{display:block}html.theme--catppuccin-latte body,html.theme--catppuccin-latte button,html.theme--catppuccin-latte input,html.theme--catppuccin-latte optgroup,html.theme--catppuccin-latte select,html.theme--catppuccin-latte textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-latte code,html.theme--catppuccin-latte pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-latte body{color:#4c4f69;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-latte a{color:#1e66f5;cursor:pointer;text-decoration:none}html.theme--catppuccin-latte a strong{color:currentColor}html.theme--catppuccin-latte a:hover{color:#04a5e5}html.theme--catppuccin-latte code{background-color:#e6e9ef;color:#4c4f69;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-latte hr{background-color:#e6e9ef;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-latte img{height:auto;max-width:100%}html.theme--catppuccin-latte input[type="checkbox"],html.theme--catppuccin-latte input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-latte small{font-size:.875em}html.theme--catppuccin-latte span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-latte strong{color:#41445a;font-weight:700}html.theme--catppuccin-latte fieldset{border:none}html.theme--catppuccin-latte pre{-webkit-overflow-scrolling:touch;background-color:#e6e9ef;color:#4c4f69;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-latte pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-latte table td,html.theme--catppuccin-latte table th{vertical-align:top}html.theme--catppuccin-latte table td:not([align]),html.theme--catppuccin-latte table th:not([align]){text-align:inherit}html.theme--catppuccin-latte table th{color:#41445a}html.theme--catppuccin-latte .box{background-color:#bcc0cc;border-radius:8px;box-shadow:none;color:#4c4f69;display:block;padding:1.25rem}html.theme--catppuccin-latte a.box:hover,html.theme--catppuccin-latte a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1e66f5}html.theme--catppuccin-latte a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1e66f5}html.theme--catppuccin-latte .button{background-color:#e6e9ef;border-color:#fff;border-width:1px;color:#1e66f5;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-latte .button strong{color:inherit}html.theme--catppuccin-latte .button .icon,html.theme--catppuccin-latte .button .icon.is-small,html.theme--catppuccin-latte .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-latte .button .icon.is-medium,html.theme--catppuccin-latte .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-latte .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-latte .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-latte .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-latte .button:hover,html.theme--catppuccin-latte .button.is-hovered{border-color:#9ca0b0;color:#41445a}html.theme--catppuccin-latte .button:focus,html.theme--catppuccin-latte .button.is-focused{border-color:#9ca0b0;color:#0b57ef}html.theme--catppuccin-latte .button:focus:not(:active),html.theme--catppuccin-latte .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button:active,html.theme--catppuccin-latte .button.is-active{border-color:#bcc0cc;color:#41445a}html.theme--catppuccin-latte .button.is-text{background-color:transparent;border-color:transparent;color:#4c4f69;text-decoration:underline}html.theme--catppuccin-latte .button.is-text:hover,html.theme--catppuccin-latte .button.is-text.is-hovered,html.theme--catppuccin-latte .button.is-text:focus,html.theme--catppuccin-latte .button.is-text.is-focused{background-color:#e6e9ef;color:#41445a}html.theme--catppuccin-latte .button.is-text:active,html.theme--catppuccin-latte .button.is-text.is-active{background-color:#d6dbe5;color:#41445a}html.theme--catppuccin-latte .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-latte .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1e66f5;text-decoration:none}html.theme--catppuccin-latte .button.is-ghost:hover,html.theme--catppuccin-latte .button.is-ghost.is-hovered{color:#1e66f5;text-decoration:underline}html.theme--catppuccin-latte .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:hover,html.theme--catppuccin-latte .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:focus,html.theme--catppuccin-latte .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:focus:not(:active),html.theme--catppuccin-latte .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .button.is-white:active,html.theme--catppuccin-latte .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-latte .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted:hover,html.theme--catppuccin-latte .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-latte .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-white.is-outlined:hover,html.theme--catppuccin-latte .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-white.is-outlined:focus,html.theme--catppuccin-latte .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:hover,html.theme--catppuccin-latte .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:focus,html.theme--catppuccin-latte .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:focus:not(:active),html.theme--catppuccin-latte .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .button.is-black:active,html.theme--catppuccin-latte .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-latte .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted:hover,html.theme--catppuccin-latte .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-outlined:hover,html.theme--catppuccin-latte .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-black.is-outlined:focus,html.theme--catppuccin-latte .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:hover,html.theme--catppuccin-latte .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:focus,html.theme--catppuccin-latte .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:focus:not(:active),html.theme--catppuccin-latte .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .button.is-light:active,html.theme--catppuccin-latte .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-latte .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted:hover,html.theme--catppuccin-latte .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-outlined:hover,html.theme--catppuccin-latte .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-light.is-outlined:focus,html.theme--catppuccin-latte .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark,html.theme--catppuccin-latte .content kbd.button{background-color:#ccd0da;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:hover,html.theme--catppuccin-latte .content kbd.button:hover,html.theme--catppuccin-latte .button.is-dark.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-hovered{background-color:#c5c9d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:focus,html.theme--catppuccin-latte .content kbd.button:focus,html.theme--catppuccin-latte .button.is-dark.is-focused,html.theme--catppuccin-latte .content kbd.button.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:focus:not(:active),html.theme--catppuccin-latte .content kbd.button:focus:not(:active),html.theme--catppuccin-latte .button.is-dark.is-focused:not(:active),html.theme--catppuccin-latte .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .button.is-dark:active,html.theme--catppuccin-latte .content kbd.button:active,html.theme--catppuccin-latte .button.is-dark.is-active,html.theme--catppuccin-latte .content kbd.button.is-active{background-color:#bdc2cf;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark[disabled],html.theme--catppuccin-latte .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button{background-color:#ccd0da;border-color:#ccd0da;box-shadow:none}html.theme--catppuccin-latte .button.is-dark.is-inverted,html.theme--catppuccin-latte .content kbd.button.is-inverted{background-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted:hover,html.theme--catppuccin-latte .content kbd.button.is-inverted:hover,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-inverted[disabled],html.theme--catppuccin-latte .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-loading::after,html.theme--catppuccin-latte .content kbd.button.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-dark.is-outlined,html.theme--catppuccin-latte .content kbd.button.is-outlined{background-color:transparent;border-color:#ccd0da;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-outlined:hover,html.theme--catppuccin-latte .content kbd.button.is-outlined:hover,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-dark.is-outlined:focus,html.theme--catppuccin-latte .content kbd.button.is-outlined:focus,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-focused{background-color:#ccd0da;border-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #ccd0da #ccd0da !important}html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-dark.is-outlined[disabled],html.theme--catppuccin-latte .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-outlined{background-color:transparent;border-color:#ccd0da;box-shadow:none;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ccd0da #ccd0da !important}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-primary,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:hover,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:focus,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:focus:not(:active),html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-latte .button.is-primary.is-focused:not(:active),html.theme--catppuccin-latte .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button.is-primary:active,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-latte .button.is-primary.is-active,html.theme--catppuccin-latte .docstring>section>a.button.is-active.docs-sourcelink{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary[disabled],html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink{background-color:#1e66f5;border-color:#1e66f5;box-shadow:none}html.theme--catppuccin-latte .button.is-primary.is-inverted,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-primary.is-inverted[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-loading::after,html.theme--catppuccin-latte .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-primary.is-outlined,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-outlined:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-latte .button.is-primary.is-outlined:focus,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-primary.is-outlined[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#1e66f5;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-light,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .button.is-primary.is-light:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-light.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#dfe9fe;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-primary.is-light:active,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-latte .button.is-primary.is-light.is-active,html.theme--catppuccin-latte .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d3e1fd;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-link{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:hover,html.theme--catppuccin-latte .button.is-link.is-hovered{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:focus,html.theme--catppuccin-latte .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:focus:not(:active),html.theme--catppuccin-latte .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button.is-link:active,html.theme--catppuccin-latte .button.is-link.is-active{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link{background-color:#1e66f5;border-color:#1e66f5;box-shadow:none}html.theme--catppuccin-latte .button.is-link.is-inverted{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted:hover,html.theme--catppuccin-latte .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-link.is-outlined{background-color:transparent;border-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-outlined:hover,html.theme--catppuccin-latte .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-link.is-outlined:focus,html.theme--catppuccin-latte .button.is-link.is-outlined.is-focused{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-outlined{background-color:transparent;border-color:#1e66f5;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-link.is-light{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .button.is-link.is-light:hover,html.theme--catppuccin-latte .button.is-link.is-light.is-hovered{background-color:#dfe9fe;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-link.is-light:active,html.theme--catppuccin-latte .button.is-link.is-light.is-active{background-color:#d3e1fd;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-info{background-color:#179299;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:hover,html.theme--catppuccin-latte .button.is-info.is-hovered{background-color:#15878e;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:focus,html.theme--catppuccin-latte .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:focus:not(:active),html.theme--catppuccin-latte .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .button.is-info:active,html.theme--catppuccin-latte .button.is-info.is-active{background-color:#147d83;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info{background-color:#179299;border-color:#179299;box-shadow:none}html.theme--catppuccin-latte .button.is-info.is-inverted{background-color:#fff;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted:hover,html.theme--catppuccin-latte .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#179299}html.theme--catppuccin-latte .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-info.is-outlined{background-color:transparent;border-color:#179299;color:#179299}html.theme--catppuccin-latte .button.is-info.is-outlined:hover,html.theme--catppuccin-latte .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-info.is-outlined:focus,html.theme--catppuccin-latte .button.is-info.is-outlined.is-focused{background-color:#179299;border-color:#179299;color:#fff}html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #179299 #179299 !important}html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-outlined{background-color:transparent;border-color:#179299;box-shadow:none;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #179299 #179299 !important}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-info.is-light{background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .button.is-info.is-light:hover,html.theme--catppuccin-latte .button.is-info.is-light.is-hovered{background-color:#e2f9fb;border-color:transparent;color:#1cb2ba}html.theme--catppuccin-latte .button.is-info.is-light:active,html.theme--catppuccin-latte .button.is-info.is-light.is-active{background-color:#d7f7f9;border-color:transparent;color:#1cb2ba}html.theme--catppuccin-latte .button.is-success{background-color:#40a02b;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:hover,html.theme--catppuccin-latte .button.is-success.is-hovered{background-color:#3c9628;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:focus,html.theme--catppuccin-latte .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:focus:not(:active),html.theme--catppuccin-latte .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .button.is-success:active,html.theme--catppuccin-latte .button.is-success.is-active{background-color:#388c26;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success{background-color:#40a02b;border-color:#40a02b;box-shadow:none}html.theme--catppuccin-latte .button.is-success.is-inverted{background-color:#fff;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted:hover,html.theme--catppuccin-latte .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-success.is-outlined{background-color:transparent;border-color:#40a02b;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-outlined:hover,html.theme--catppuccin-latte .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-success.is-outlined:focus,html.theme--catppuccin-latte .button.is-success.is-outlined.is-focused{background-color:#40a02b;border-color:#40a02b;color:#fff}html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #40a02b #40a02b !important}html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-outlined{background-color:transparent;border-color:#40a02b;box-shadow:none;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #40a02b #40a02b !important}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-success.is-light{background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .button.is-success.is-light:hover,html.theme--catppuccin-latte .button.is-success.is-light.is-hovered{background-color:#e8f8e5;border-color:transparent;color:#40a12b}html.theme--catppuccin-latte .button.is-success.is-light:active,html.theme--catppuccin-latte .button.is-success.is-light.is-active{background-color:#e0f5db;border-color:transparent;color:#40a12b}html.theme--catppuccin-latte .button.is-warning{background-color:#df8e1d;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:hover,html.theme--catppuccin-latte .button.is-warning.is-hovered{background-color:#d4871c;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:focus,html.theme--catppuccin-latte .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:focus:not(:active),html.theme--catppuccin-latte .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .button.is-warning:active,html.theme--catppuccin-latte .button.is-warning.is-active{background-color:#c8801a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning{background-color:#df8e1d;border-color:#df8e1d;box-shadow:none}html.theme--catppuccin-latte .button.is-warning.is-inverted{background-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted:hover,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-warning.is-outlined{background-color:transparent;border-color:#df8e1d;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-outlined:hover,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-warning.is-outlined:focus,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-focused{background-color:#df8e1d;border-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #df8e1d #df8e1d !important}html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-outlined{background-color:transparent;border-color:#df8e1d;box-shadow:none;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #df8e1d #df8e1d !important}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-light{background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .button.is-warning.is-light:hover,html.theme--catppuccin-latte .button.is-warning.is-light.is-hovered{background-color:#fbf1e2;border-color:transparent;color:#9e6515}html.theme--catppuccin-latte .button.is-warning.is-light:active,html.theme--catppuccin-latte .button.is-warning.is-light.is-active{background-color:#faebd6;border-color:transparent;color:#9e6515}html.theme--catppuccin-latte .button.is-danger{background-color:#d20f39;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:hover,html.theme--catppuccin-latte .button.is-danger.is-hovered{background-color:#c60e36;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:focus,html.theme--catppuccin-latte .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:focus:not(:active),html.theme--catppuccin-latte .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .button.is-danger:active,html.theme--catppuccin-latte .button.is-danger.is-active{background-color:#ba0d33;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger{background-color:#d20f39;border-color:#d20f39;box-shadow:none}html.theme--catppuccin-latte .button.is-danger.is-inverted{background-color:#fff;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted:hover,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-danger.is-outlined{background-color:transparent;border-color:#d20f39;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-outlined:hover,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-danger.is-outlined:focus,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-focused{background-color:#d20f39;border-color:#d20f39;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #d20f39 #d20f39 !important}html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-outlined{background-color:transparent;border-color:#d20f39;box-shadow:none;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #d20f39 #d20f39 !important}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-light{background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .button.is-danger.is-light:hover,html.theme--catppuccin-latte .button.is-danger.is-light.is-hovered{background-color:#fde0e6;border-color:transparent;color:#e9113f}html.theme--catppuccin-latte .button.is-danger.is-light:active,html.theme--catppuccin-latte .button.is-danger.is-light.is-active{background-color:#fcd4dd;border-color:transparent;color:#e9113f}html.theme--catppuccin-latte .button.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-latte .button.is-small:not(.is-rounded),html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-latte .button.is-normal{font-size:1rem}html.theme--catppuccin-latte .button.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .button.is-large{font-size:1.5rem}html.theme--catppuccin-latte .button[disabled],fieldset[disabled] html.theme--catppuccin-latte .button{background-color:#9ca0b0;border-color:#acb0be;box-shadow:none;opacity:.5}html.theme--catppuccin-latte .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-latte .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-latte .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-latte .button.is-static{background-color:#e6e9ef;border-color:#acb0be;color:#8c8fa1;box-shadow:none;pointer-events:none}html.theme--catppuccin-latte .button.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-latte .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-latte .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-latte .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-latte .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-latte .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-latte .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-latte .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-latte .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-latte .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-latte .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-latte .buttons.has-addons .button:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-latte .buttons.has-addons .button:focus,html.theme--catppuccin-latte .buttons.has-addons .button.is-focused,html.theme--catppuccin-latte .buttons.has-addons .button:active,html.theme--catppuccin-latte .buttons.has-addons .button.is-active,html.theme--catppuccin-latte .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-latte .buttons.has-addons .button:focus:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-latte .buttons.has-addons .button:active:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-latte .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .buttons.is-centered{justify-content:center}html.theme--catppuccin-latte .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-latte .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-latte .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .button.is-responsive.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-latte .button.is-responsive,html.theme--catppuccin-latte .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-latte .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-latte .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .button.is-responsive.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-latte .button.is-responsive,html.theme--catppuccin-latte .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-latte .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-latte .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-latte .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-latte .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-latte .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-latte .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-latte .content li+li{margin-top:0.25em}html.theme--catppuccin-latte .content p:not(:last-child),html.theme--catppuccin-latte .content dl:not(:last-child),html.theme--catppuccin-latte .content ol:not(:last-child),html.theme--catppuccin-latte .content ul:not(:last-child),html.theme--catppuccin-latte .content blockquote:not(:last-child),html.theme--catppuccin-latte .content pre:not(:last-child),html.theme--catppuccin-latte .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-latte .content h1,html.theme--catppuccin-latte .content h2,html.theme--catppuccin-latte .content h3,html.theme--catppuccin-latte .content h4,html.theme--catppuccin-latte .content h5,html.theme--catppuccin-latte .content h6{color:#4c4f69;font-weight:600;line-height:1.125}html.theme--catppuccin-latte .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-latte .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-latte .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-latte .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-latte .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-latte .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-latte .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-latte .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-latte .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-latte .content blockquote{background-color:#e6e9ef;border-left:5px solid #acb0be;padding:1.25em 1.5em}html.theme--catppuccin-latte .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-latte .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-latte .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-latte .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-latte .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-latte .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-latte .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-latte .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-latte .content ul ul ul{list-style-type:square}html.theme--catppuccin-latte .content dd{margin-left:2em}html.theme--catppuccin-latte .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-latte .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-latte .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-latte .content figure img{display:inline-block}html.theme--catppuccin-latte .content figure figcaption{font-style:italic}html.theme--catppuccin-latte .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-latte .content sup,html.theme--catppuccin-latte .content sub{font-size:75%}html.theme--catppuccin-latte .content table{width:100%}html.theme--catppuccin-latte .content table td,html.theme--catppuccin-latte .content table th{border:1px solid #acb0be;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-latte .content table th{color:#41445a}html.theme--catppuccin-latte .content table th:not([align]){text-align:inherit}html.theme--catppuccin-latte .content table thead td,html.theme--catppuccin-latte .content table thead th{border-width:0 0 2px;color:#41445a}html.theme--catppuccin-latte .content table tfoot td,html.theme--catppuccin-latte .content table tfoot th{border-width:2px 0 0;color:#41445a}html.theme--catppuccin-latte .content table tbody tr:last-child td,html.theme--catppuccin-latte .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-latte .content .tabs li+li{margin-top:0}html.theme--catppuccin-latte .content.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-latte .content.is-normal{font-size:1rem}html.theme--catppuccin-latte .content.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .content.is-large{font-size:1.5rem}html.theme--catppuccin-latte .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-latte .icon.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-latte .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-latte .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-latte .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-latte .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-latte .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-latte div.icon-text{display:flex}html.theme--catppuccin-latte .image,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-latte .image img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-latte .image img.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-latte .image.is-fullwidth,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-latte .image.is-square img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-latte .image.is-square .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-latte .image.is-1by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-latte .image.is-1by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-latte .image.is-5by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-latte .image.is-5by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-latte .image.is-4by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-latte .image.is-4by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-latte .image.is-3by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-latte .image.is-5by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-latte .image.is-5by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-latte .image.is-16by9 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-latte .image.is-16by9 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-latte .image.is-2by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-latte .image.is-2by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-latte .image.is-3by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-latte .image.is-3by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-latte .image.is-4by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-latte .image.is-4by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-latte .image.is-3by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-latte .image.is-3by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-latte .image.is-2by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-latte .image.is-2by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-latte .image.is-3by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-latte .image.is-9by16 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-latte .image.is-9by16 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-latte .image.is-1by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-latte .image.is-1by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-latte .image.is-1by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-latte .image.is-1by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-latte .image.is-square,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-latte .image.is-1by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-latte .image.is-5by4,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-latte .image.is-4by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-latte .image.is-3by2,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-latte .image.is-5by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-latte .image.is-16by9,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-latte .image.is-2by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-latte .image.is-3by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-latte .image.is-4by5,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-latte .image.is-3by4,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-latte .image.is-2by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-latte .image.is-3by5,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-latte .image.is-9by16,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-latte .image.is-1by2,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-latte .image.is-1by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-latte .image.is-16x16,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-latte .image.is-24x24,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-latte .image.is-32x32,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-latte .image.is-48x48,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-latte .image.is-64x64,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-latte .image.is-96x96,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-latte .image.is-128x128,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-latte .notification{background-color:#e6e9ef;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-latte .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-latte .notification strong{color:currentColor}html.theme--catppuccin-latte .notification code,html.theme--catppuccin-latte .notification pre{background:#fff}html.theme--catppuccin-latte .notification pre code{background:transparent}html.theme--catppuccin-latte .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-latte .notification .title,html.theme--catppuccin-latte .notification .subtitle,html.theme--catppuccin-latte .notification .content{color:currentColor}html.theme--catppuccin-latte .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .notification.is-dark,html.theme--catppuccin-latte .content kbd.notification{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .notification.is-primary,html.theme--catppuccin-latte .docstring>section>a.notification.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .notification.is-primary.is-light,html.theme--catppuccin-latte .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .notification.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .notification.is-link.is-light{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .notification.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .notification.is-info.is-light{background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .notification.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .notification.is-success.is-light{background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .notification.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .notification.is-warning.is-light{background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .notification.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .notification.is-danger.is-light{background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-latte .progress::-webkit-progress-bar{background-color:#bcc0cc}html.theme--catppuccin-latte .progress::-webkit-progress-value{background-color:#8c8fa1}html.theme--catppuccin-latte .progress::-moz-progress-bar{background-color:#8c8fa1}html.theme--catppuccin-latte .progress::-ms-fill{background-color:#8c8fa1;border:none}html.theme--catppuccin-latte .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-latte .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-latte .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-latte .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-latte .content kbd.progress::-webkit-progress-value{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-latte .content kbd.progress::-moz-progress-bar{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark::-ms-fill,html.theme--catppuccin-latte .content kbd.progress::-ms-fill{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark:indeterminate,html.theme--catppuccin-latte .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #ccd0da 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary::-ms-fill,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary:indeterminate,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #1e66f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-link::-webkit-progress-value{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link::-moz-progress-bar{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link::-ms-fill{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1e66f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-info::-webkit-progress-value{background-color:#179299}html.theme--catppuccin-latte .progress.is-info::-moz-progress-bar{background-color:#179299}html.theme--catppuccin-latte .progress.is-info::-ms-fill{background-color:#179299}html.theme--catppuccin-latte .progress.is-info:indeterminate{background-image:linear-gradient(to right, #179299 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-success::-webkit-progress-value{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success::-moz-progress-bar{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success::-ms-fill{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success:indeterminate{background-image:linear-gradient(to right, #40a02b 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-warning::-webkit-progress-value{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning::-moz-progress-bar{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning::-ms-fill{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #df8e1d 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-danger::-webkit-progress-value{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger::-moz-progress-bar{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger::-ms-fill{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #d20f39 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#bcc0cc;background-image:linear-gradient(to right, #4c4f69 30%, #bcc0cc 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-latte .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-latte .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-latte .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-latte .progress.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-latte .progress.is-medium{height:1.25rem}html.theme--catppuccin-latte .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-latte .table{background-color:#bcc0cc;color:#4c4f69}html.theme--catppuccin-latte .table td,html.theme--catppuccin-latte .table th{border:1px solid #acb0be;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-latte .table td.is-white,html.theme--catppuccin-latte .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .table td.is-black,html.theme--catppuccin-latte .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .table td.is-light,html.theme--catppuccin-latte .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .table td.is-dark,html.theme--catppuccin-latte .table th.is-dark{background-color:#ccd0da;border-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .table td.is-primary,html.theme--catppuccin-latte .table th.is-primary{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-link,html.theme--catppuccin-latte .table th.is-link{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-info,html.theme--catppuccin-latte .table th.is-info{background-color:#179299;border-color:#179299;color:#fff}html.theme--catppuccin-latte .table td.is-success,html.theme--catppuccin-latte .table th.is-success{background-color:#40a02b;border-color:#40a02b;color:#fff}html.theme--catppuccin-latte .table td.is-warning,html.theme--catppuccin-latte .table th.is-warning{background-color:#df8e1d;border-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .table td.is-danger,html.theme--catppuccin-latte .table th.is-danger{background-color:#d20f39;border-color:#d20f39;color:#fff}html.theme--catppuccin-latte .table td.is-narrow,html.theme--catppuccin-latte .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-latte .table td.is-selected,html.theme--catppuccin-latte .table th.is-selected{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-selected a,html.theme--catppuccin-latte .table td.is-selected strong,html.theme--catppuccin-latte .table th.is-selected a,html.theme--catppuccin-latte .table th.is-selected strong{color:currentColor}html.theme--catppuccin-latte .table td.is-vcentered,html.theme--catppuccin-latte .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-latte .table th{color:#41445a}html.theme--catppuccin-latte .table th:not([align]){text-align:left}html.theme--catppuccin-latte .table tr.is-selected{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table tr.is-selected a,html.theme--catppuccin-latte .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-latte .table tr.is-selected td,html.theme--catppuccin-latte .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-latte .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table thead td,html.theme--catppuccin-latte .table thead th{border-width:0 0 2px;color:#41445a}html.theme--catppuccin-latte .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table tfoot td,html.theme--catppuccin-latte .table tfoot th{border-width:2px 0 0;color:#41445a}html.theme--catppuccin-latte .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table tbody tr:last-child td,html.theme--catppuccin-latte .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-latte .table.is-bordered td,html.theme--catppuccin-latte .table.is-bordered th{border-width:1px}html.theme--catppuccin-latte .table.is-bordered tr:last-child td,html.theme--catppuccin-latte .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-latte .table.is-fullwidth{width:100%}html.theme--catppuccin-latte .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#ccd0da}html.theme--catppuccin-latte .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#ccd0da}html.theme--catppuccin-latte .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#d2d5de}html.theme--catppuccin-latte .table.is-narrow td,html.theme--catppuccin-latte .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-latte .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#ccd0da}html.theme--catppuccin-latte .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-latte .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .tags .tag,html.theme--catppuccin-latte .tags .content kbd,html.theme--catppuccin-latte .content .tags kbd,html.theme--catppuccin-latte .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-latte .tags .tag:not(:last-child),html.theme--catppuccin-latte .tags .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags kbd:not(:last-child),html.theme--catppuccin-latte .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-latte .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-latte .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-latte .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-latte .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-latte .tags.is-centered{justify-content:center}html.theme--catppuccin-latte .tags.is-centered .tag,html.theme--catppuccin-latte .tags.is-centered .content kbd,html.theme--catppuccin-latte .content .tags.is-centered kbd,html.theme--catppuccin-latte .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-latte .tags.is-right{justify-content:flex-end}html.theme--catppuccin-latte .tags.is-right .tag:not(:first-child),html.theme--catppuccin-latte .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-latte .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-latte .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-latte .tags.is-right .tag:not(:last-child),html.theme--catppuccin-latte .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-latte .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-latte .tags.has-addons .tag,html.theme--catppuccin-latte .tags.has-addons .content kbd,html.theme--catppuccin-latte .content .tags.has-addons kbd,html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-latte .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-latte .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-latte .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-latte .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-latte .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-latte .tag:not(body),html.theme--catppuccin-latte .content kbd:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#e6e9ef;border-radius:.4em;color:#4c4f69;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-latte .tag:not(body) .delete,html.theme--catppuccin-latte .content kbd:not(body) .delete,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-latte .tag.is-white:not(body),html.theme--catppuccin-latte .content kbd.is-white:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .tag.is-black:not(body),html.theme--catppuccin-latte .content kbd.is-black:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .tag.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .tag.is-dark:not(body),html.theme--catppuccin-latte .content kbd:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-latte .content .docstring>section>kbd:not(body){background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .tag.is-primary:not(body),html.theme--catppuccin-latte .content kbd.is-primary:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .tag.is-primary.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .tag.is-link:not(body),html.theme--catppuccin-latte .content kbd.is-link:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .tag.is-link.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-link.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .tag.is-info:not(body),html.theme--catppuccin-latte .content kbd.is-info:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#179299;color:#fff}html.theme--catppuccin-latte .tag.is-info.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-info.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .tag.is-success:not(body),html.theme--catppuccin-latte .content kbd.is-success:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .tag.is-success.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-success.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .tag.is-warning:not(body),html.theme--catppuccin-latte .content kbd.is-warning:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .tag.is-warning.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .tag.is-danger:not(body),html.theme--catppuccin-latte .content kbd.is-danger:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .tag.is-danger.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .tag.is-normal:not(body),html.theme--catppuccin-latte .content kbd.is-normal:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-latte .tag.is-medium:not(body),html.theme--catppuccin-latte .content kbd.is-medium:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-latte .tag.is-large:not(body),html.theme--catppuccin-latte .content kbd.is-large:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-latte .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-latte .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-latte .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-latte .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-latte .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-latte .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-latte .tag.is-delete:not(body),html.theme--catppuccin-latte .content kbd.is-delete:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-latte .tag.is-delete:not(body)::before,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::before,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-latte .tag.is-delete:not(body)::after,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::after,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-latte .tag.is-delete:not(body)::before,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::before,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-latte .tag.is-delete:not(body)::after,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::after,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-latte .tag.is-delete:not(body):hover,html.theme--catppuccin-latte .content kbd.is-delete:not(body):hover,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-latte .tag.is-delete:not(body):focus,html.theme--catppuccin-latte .content kbd.is-delete:not(body):focus,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#d6dbe5}html.theme--catppuccin-latte .tag.is-delete:not(body):active,html.theme--catppuccin-latte .content kbd.is-delete:not(body):active,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#c7cedb}html.theme--catppuccin-latte .tag.is-rounded:not(body),html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-latte .content kbd.is-rounded:not(body),html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-latte a.tag:hover,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-latte .title,html.theme--catppuccin-latte .subtitle{word-break:break-word}html.theme--catppuccin-latte .title em,html.theme--catppuccin-latte .title span,html.theme--catppuccin-latte .subtitle em,html.theme--catppuccin-latte .subtitle span{font-weight:inherit}html.theme--catppuccin-latte .title sub,html.theme--catppuccin-latte .subtitle sub{font-size:.75em}html.theme--catppuccin-latte .title sup,html.theme--catppuccin-latte .subtitle sup{font-size:.75em}html.theme--catppuccin-latte .title .tag,html.theme--catppuccin-latte .title .content kbd,html.theme--catppuccin-latte .content .title kbd,html.theme--catppuccin-latte .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-latte .subtitle .tag,html.theme--catppuccin-latte .subtitle .content kbd,html.theme--catppuccin-latte .content .subtitle kbd,html.theme--catppuccin-latte .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-latte .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-latte .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-latte .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-latte .title.is-1{font-size:3rem}html.theme--catppuccin-latte .title.is-2{font-size:2.5rem}html.theme--catppuccin-latte .title.is-3{font-size:2rem}html.theme--catppuccin-latte .title.is-4{font-size:1.5rem}html.theme--catppuccin-latte .title.is-5{font-size:1.25rem}html.theme--catppuccin-latte .title.is-6{font-size:1rem}html.theme--catppuccin-latte .title.is-7{font-size:.75rem}html.theme--catppuccin-latte .subtitle{color:#9ca0b0;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-latte .subtitle strong{color:#9ca0b0;font-weight:600}html.theme--catppuccin-latte .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-latte .subtitle.is-1{font-size:3rem}html.theme--catppuccin-latte .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-latte .subtitle.is-3{font-size:2rem}html.theme--catppuccin-latte .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-latte .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-latte .subtitle.is-6{font-size:1rem}html.theme--catppuccin-latte .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-latte .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-latte .number{align-items:center;background-color:#e6e9ef;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{background-color:#eff1f5;border-color:#acb0be;border-radius:.4em;color:#8c8fa1}html.theme--catppuccin-latte .select select::-moz-placeholder,html.theme--catppuccin-latte .textarea::-moz-placeholder,html.theme--catppuccin-latte .input::-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-latte .select select::-webkit-input-placeholder,html.theme--catppuccin-latte .textarea::-webkit-input-placeholder,html.theme--catppuccin-latte .input::-webkit-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:-moz-placeholder,html.theme--catppuccin-latte .textarea:-moz-placeholder,html.theme--catppuccin-latte .input:-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:-ms-input-placeholder,html.theme--catppuccin-latte .textarea:-ms-input-placeholder,html.theme--catppuccin-latte .input:-ms-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:hover,html.theme--catppuccin-latte .textarea:hover,html.theme--catppuccin-latte .input:hover,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-latte .select select.is-hovered,html.theme--catppuccin-latte .is-hovered.textarea,html.theme--catppuccin-latte .is-hovered.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#9ca0b0}html.theme--catppuccin-latte .select select:focus,html.theme--catppuccin-latte .textarea:focus,html.theme--catppuccin-latte .input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-latte .select select.is-focused,html.theme--catppuccin-latte .is-focused.textarea,html.theme--catppuccin-latte .is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .select select:active,html.theme--catppuccin-latte .textarea:active,html.theme--catppuccin-latte .input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-latte .select select.is-active,html.theme--catppuccin-latte .is-active.textarea,html.theme--catppuccin-latte .is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1e66f5;box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select select[disabled],html.theme--catppuccin-latte .textarea[disabled],html.theme--catppuccin-latte .input[disabled],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-latte .select select,fieldset[disabled] html.theme--catppuccin-latte .textarea,fieldset[disabled] html.theme--catppuccin-latte .input,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{background-color:#9ca0b0;border-color:#e6e9ef;box-shadow:none;color:#616587}html.theme--catppuccin-latte .select select[disabled]::-moz-placeholder,html.theme--catppuccin-latte .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-latte .input[disabled]::-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]:-moz-placeholder,html.theme--catppuccin-latte .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-latte .input[disabled]:-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-latte .textarea[readonly],html.theme--catppuccin-latte .input[readonly],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-latte .is-white.textarea,html.theme--catppuccin-latte .is-white.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-latte .is-white.textarea:focus,html.theme--catppuccin-latte .is-white.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-latte .is-white.is-focused.textarea,html.theme--catppuccin-latte .is-white.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-white.textarea:active,html.theme--catppuccin-latte .is-white.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-latte .is-white.is-active.textarea,html.theme--catppuccin-latte .is-white.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .is-black.textarea,html.theme--catppuccin-latte .is-black.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-latte .is-black.textarea:focus,html.theme--catppuccin-latte .is-black.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-latte .is-black.is-focused.textarea,html.theme--catppuccin-latte .is-black.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-black.textarea:active,html.theme--catppuccin-latte .is-black.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-latte .is-black.is-active.textarea,html.theme--catppuccin-latte .is-black.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .is-light.textarea,html.theme--catppuccin-latte .is-light.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-latte .is-light.textarea:focus,html.theme--catppuccin-latte .is-light.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-latte .is-light.is-focused.textarea,html.theme--catppuccin-latte .is-light.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-light.textarea:active,html.theme--catppuccin-latte .is-light.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-latte .is-light.is-active.textarea,html.theme--catppuccin-latte .is-light.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .is-dark.textarea,html.theme--catppuccin-latte .content kbd.textarea,html.theme--catppuccin-latte .is-dark.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-latte .content kbd.input{border-color:#ccd0da}html.theme--catppuccin-latte .is-dark.textarea:focus,html.theme--catppuccin-latte .content kbd.textarea:focus,html.theme--catppuccin-latte .is-dark.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-latte .content kbd.input:focus,html.theme--catppuccin-latte .is-dark.is-focused.textarea,html.theme--catppuccin-latte .content kbd.is-focused.textarea,html.theme--catppuccin-latte .is-dark.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .content kbd.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-dark.textarea:active,html.theme--catppuccin-latte .content kbd.textarea:active,html.theme--catppuccin-latte .is-dark.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-latte .content kbd.input:active,html.theme--catppuccin-latte .is-dark.is-active.textarea,html.theme--catppuccin-latte .content kbd.is-active.textarea,html.theme--catppuccin-latte .is-dark.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .content kbd.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .is-primary.textarea,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink{border-color:#1e66f5}html.theme--catppuccin-latte .is-primary.textarea:focus,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-latte .is-primary.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-latte .is-primary.is-focused.textarea,html.theme--catppuccin-latte .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-latte .is-primary.textarea:active,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-latte .is-primary.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-latte .is-primary.is-active.textarea,html.theme--catppuccin-latte .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .is-link.textarea,html.theme--catppuccin-latte .is-link.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1e66f5}html.theme--catppuccin-latte .is-link.textarea:focus,html.theme--catppuccin-latte .is-link.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-latte .is-link.is-focused.textarea,html.theme--catppuccin-latte .is-link.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-link.textarea:active,html.theme--catppuccin-latte .is-link.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-latte .is-link.is-active.textarea,html.theme--catppuccin-latte .is-link.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .is-info.textarea,html.theme--catppuccin-latte .is-info.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#179299}html.theme--catppuccin-latte .is-info.textarea:focus,html.theme--catppuccin-latte .is-info.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-latte .is-info.is-focused.textarea,html.theme--catppuccin-latte .is-info.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-info.textarea:active,html.theme--catppuccin-latte .is-info.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-latte .is-info.is-active.textarea,html.theme--catppuccin-latte .is-info.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .is-success.textarea,html.theme--catppuccin-latte .is-success.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#40a02b}html.theme--catppuccin-latte .is-success.textarea:focus,html.theme--catppuccin-latte .is-success.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-latte .is-success.is-focused.textarea,html.theme--catppuccin-latte .is-success.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-success.textarea:active,html.theme--catppuccin-latte .is-success.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-latte .is-success.is-active.textarea,html.theme--catppuccin-latte .is-success.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .is-warning.textarea,html.theme--catppuccin-latte .is-warning.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#df8e1d}html.theme--catppuccin-latte .is-warning.textarea:focus,html.theme--catppuccin-latte .is-warning.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-latte .is-warning.is-focused.textarea,html.theme--catppuccin-latte .is-warning.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-warning.textarea:active,html.theme--catppuccin-latte .is-warning.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-latte .is-warning.is-active.textarea,html.theme--catppuccin-latte .is-warning.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .is-danger.textarea,html.theme--catppuccin-latte .is-danger.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#d20f39}html.theme--catppuccin-latte .is-danger.textarea:focus,html.theme--catppuccin-latte .is-danger.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-latte .is-danger.is-focused.textarea,html.theme--catppuccin-latte .is-danger.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-danger.textarea:active,html.theme--catppuccin-latte .is-danger.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-latte .is-danger.is-active.textarea,html.theme--catppuccin-latte .is-danger.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .is-small.textarea,html.theme--catppuccin-latte .is-small.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-latte .is-medium.textarea,html.theme--catppuccin-latte .is-medium.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .is-large.textarea,html.theme--catppuccin-latte .is-large.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-latte .is-fullwidth.textarea,html.theme--catppuccin-latte .is-fullwidth.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-latte .is-inline.textarea,html.theme--catppuccin-latte .is-inline.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-latte .input.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-latte .input.is-static,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-latte .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-latte .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-latte .textarea[rows]{height:initial}html.theme--catppuccin-latte .textarea.has-fixed-size{resize:none}html.theme--catppuccin-latte .radio,html.theme--catppuccin-latte .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-latte .radio input,html.theme--catppuccin-latte .checkbox input{cursor:pointer}html.theme--catppuccin-latte .radio:hover,html.theme--catppuccin-latte .checkbox:hover{color:#04a5e5}html.theme--catppuccin-latte .radio[disabled],html.theme--catppuccin-latte .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-latte .radio,fieldset[disabled] html.theme--catppuccin-latte .checkbox,html.theme--catppuccin-latte .radio input[disabled],html.theme--catppuccin-latte .checkbox input[disabled]{color:#616587;cursor:not-allowed}html.theme--catppuccin-latte .radio+.radio{margin-left:.5em}html.theme--catppuccin-latte .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-latte .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading)::after{border-color:#1e66f5;right:1.125em;z-index:4}html.theme--catppuccin-latte .select.is-rounded select,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-latte .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-latte .select select::-ms-expand{display:none}html.theme--catppuccin-latte .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-latte .select select:hover{border-color:#e6e9ef}html.theme--catppuccin-latte .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-latte .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-latte .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#04a5e5}html.theme--catppuccin-latte .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-latte .select.is-white select{border-color:#fff}html.theme--catppuccin-latte .select.is-white select:hover,html.theme--catppuccin-latte .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-latte .select.is-white select:focus,html.theme--catppuccin-latte .select.is-white select.is-focused,html.theme--catppuccin-latte .select.is-white select:active,html.theme--catppuccin-latte .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-latte .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-latte .select.is-black select:hover,html.theme--catppuccin-latte .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-latte .select.is-black select:focus,html.theme--catppuccin-latte .select.is-black select.is-focused,html.theme--catppuccin-latte .select.is-black select:active,html.theme--catppuccin-latte .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-latte .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-latte .select.is-light select:hover,html.theme--catppuccin-latte .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-latte .select.is-light select:focus,html.theme--catppuccin-latte .select.is-light select.is-focused,html.theme--catppuccin-latte .select.is-light select:active,html.theme--catppuccin-latte .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .select.is-dark:not(:hover)::after,html.theme--catppuccin-latte .content kbd.select:not(:hover)::after{border-color:#ccd0da}html.theme--catppuccin-latte .select.is-dark select,html.theme--catppuccin-latte .content kbd.select select{border-color:#ccd0da}html.theme--catppuccin-latte .select.is-dark select:hover,html.theme--catppuccin-latte .content kbd.select select:hover,html.theme--catppuccin-latte .select.is-dark select.is-hovered,html.theme--catppuccin-latte .content kbd.select select.is-hovered{border-color:#bdc2cf}html.theme--catppuccin-latte .select.is-dark select:focus,html.theme--catppuccin-latte .content kbd.select select:focus,html.theme--catppuccin-latte .select.is-dark select.is-focused,html.theme--catppuccin-latte .content kbd.select select.is-focused,html.theme--catppuccin-latte .select.is-dark select:active,html.theme--catppuccin-latte .content kbd.select select:active,html.theme--catppuccin-latte .select.is-dark select.is-active,html.theme--catppuccin-latte .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .select.is-primary:not(:hover)::after,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-primary select,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-primary select:hover,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-latte .select.is-primary select.is-hovered,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#0b57ef}html.theme--catppuccin-latte .select.is-primary select:focus,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-latte .select.is-primary select.is-focused,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-latte .select.is-primary select:active,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-latte .select.is-primary select.is-active,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select.is-link:not(:hover)::after{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-link select{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-link select:hover,html.theme--catppuccin-latte .select.is-link select.is-hovered{border-color:#0b57ef}html.theme--catppuccin-latte .select.is-link select:focus,html.theme--catppuccin-latte .select.is-link select.is-focused,html.theme--catppuccin-latte .select.is-link select:active,html.theme--catppuccin-latte .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select.is-info:not(:hover)::after{border-color:#179299}html.theme--catppuccin-latte .select.is-info select{border-color:#179299}html.theme--catppuccin-latte .select.is-info select:hover,html.theme--catppuccin-latte .select.is-info select.is-hovered{border-color:#147d83}html.theme--catppuccin-latte .select.is-info select:focus,html.theme--catppuccin-latte .select.is-info select.is-focused,html.theme--catppuccin-latte .select.is-info select:active,html.theme--catppuccin-latte .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .select.is-success:not(:hover)::after{border-color:#40a02b}html.theme--catppuccin-latte .select.is-success select{border-color:#40a02b}html.theme--catppuccin-latte .select.is-success select:hover,html.theme--catppuccin-latte .select.is-success select.is-hovered{border-color:#388c26}html.theme--catppuccin-latte .select.is-success select:focus,html.theme--catppuccin-latte .select.is-success select.is-focused,html.theme--catppuccin-latte .select.is-success select:active,html.theme--catppuccin-latte .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .select.is-warning:not(:hover)::after{border-color:#df8e1d}html.theme--catppuccin-latte .select.is-warning select{border-color:#df8e1d}html.theme--catppuccin-latte .select.is-warning select:hover,html.theme--catppuccin-latte .select.is-warning select.is-hovered{border-color:#c8801a}html.theme--catppuccin-latte .select.is-warning select:focus,html.theme--catppuccin-latte .select.is-warning select.is-focused,html.theme--catppuccin-latte .select.is-warning select:active,html.theme--catppuccin-latte .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .select.is-danger:not(:hover)::after{border-color:#d20f39}html.theme--catppuccin-latte .select.is-danger select{border-color:#d20f39}html.theme--catppuccin-latte .select.is-danger select:hover,html.theme--catppuccin-latte .select.is-danger select.is-hovered{border-color:#ba0d33}html.theme--catppuccin-latte .select.is-danger select:focus,html.theme--catppuccin-latte .select.is-danger select.is-focused,html.theme--catppuccin-latte .select.is-danger select:active,html.theme--catppuccin-latte .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .select.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-latte .select.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .select.is-large{font-size:1.5rem}html.theme--catppuccin-latte .select.is-disabled::after{border-color:#616587 !important;opacity:0.5}html.theme--catppuccin-latte .select.is-fullwidth{width:100%}html.theme--catppuccin-latte .select.is-fullwidth select{width:100%}html.theme--catppuccin-latte .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-latte .select.is-loading.is-small:after,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-latte .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-latte .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-latte .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-latte .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:hover .file-cta,html.theme--catppuccin-latte .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:focus .file-cta,html.theme--catppuccin-latte .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:active .file-cta,html.theme--catppuccin-latte .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-black:hover .file-cta,html.theme--catppuccin-latte .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-black:focus .file-cta,html.theme--catppuccin-latte .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-latte .file.is-black:active .file-cta,html.theme--catppuccin-latte .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:hover .file-cta,html.theme--catppuccin-latte .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:focus .file-cta,html.theme--catppuccin-latte .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:active .file-cta,html.theme--catppuccin-latte .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark .file-cta,html.theme--catppuccin-latte .content kbd.file .file-cta{background-color:#ccd0da;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:hover .file-cta,html.theme--catppuccin-latte .content kbd.file:hover .file-cta,html.theme--catppuccin-latte .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-latte .content kbd.file.is-hovered .file-cta{background-color:#c5c9d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:focus .file-cta,html.theme--catppuccin-latte .content kbd.file:focus .file-cta,html.theme--catppuccin-latte .file.is-dark.is-focused .file-cta,html.theme--catppuccin-latte .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(204,208,218,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:active .file-cta,html.theme--catppuccin-latte .content kbd.file:active .file-cta,html.theme--catppuccin-latte .file.is-dark.is-active .file-cta,html.theme--catppuccin-latte .content kbd.file.is-active .file-cta{background-color:#bdc2cf;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-primary .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-primary:hover .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-latte .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-primary:focus .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-latte .file.is-primary.is-focused .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(30,102,245,0.25);color:#fff}html.theme--catppuccin-latte .file.is-primary:active .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-latte .file.is-primary.is-active .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link .file-cta{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link:hover .file-cta,html.theme--catppuccin-latte .file.is-link.is-hovered .file-cta{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link:focus .file-cta,html.theme--catppuccin-latte .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(30,102,245,0.25);color:#fff}html.theme--catppuccin-latte .file.is-link:active .file-cta,html.theme--catppuccin-latte .file.is-link.is-active .file-cta{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info .file-cta{background-color:#179299;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info:hover .file-cta,html.theme--catppuccin-latte .file.is-info.is-hovered .file-cta{background-color:#15878e;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info:focus .file-cta,html.theme--catppuccin-latte .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(23,146,153,0.25);color:#fff}html.theme--catppuccin-latte .file.is-info:active .file-cta,html.theme--catppuccin-latte .file.is-info.is-active .file-cta{background-color:#147d83;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success .file-cta{background-color:#40a02b;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success:hover .file-cta,html.theme--catppuccin-latte .file.is-success.is-hovered .file-cta{background-color:#3c9628;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success:focus .file-cta,html.theme--catppuccin-latte .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(64,160,43,0.25);color:#fff}html.theme--catppuccin-latte .file.is-success:active .file-cta,html.theme--catppuccin-latte .file.is-success.is-active .file-cta{background-color:#388c26;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning .file-cta{background-color:#df8e1d;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning:hover .file-cta,html.theme--catppuccin-latte .file.is-warning.is-hovered .file-cta{background-color:#d4871c;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning:focus .file-cta,html.theme--catppuccin-latte .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(223,142,29,0.25);color:#fff}html.theme--catppuccin-latte .file.is-warning:active .file-cta,html.theme--catppuccin-latte .file.is-warning.is-active .file-cta{background-color:#c8801a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger .file-cta{background-color:#d20f39;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger:hover .file-cta,html.theme--catppuccin-latte .file.is-danger.is-hovered .file-cta{background-color:#c60e36;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger:focus .file-cta,html.theme--catppuccin-latte .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(210,15,57,0.25);color:#fff}html.theme--catppuccin-latte .file.is-danger:active .file-cta,html.theme--catppuccin-latte .file.is-danger.is-active .file-cta{background-color:#ba0d33;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-latte .file.is-normal{font-size:1rem}html.theme--catppuccin-latte .file.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-latte .file.is-large{font-size:1.5rem}html.theme--catppuccin-latte .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-latte .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-latte .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-latte .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-latte .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-latte .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-latte .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-latte .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-latte .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-latte .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-latte .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-latte .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-latte .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-latte .file.is-centered{justify-content:center}html.theme--catppuccin-latte .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-latte .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-latte .file.is-right{justify-content:flex-end}html.theme--catppuccin-latte .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-latte .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-latte .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-latte .file-label:hover .file-cta{background-color:#c5c9d5;color:#41445a}html.theme--catppuccin-latte .file-label:hover .file-name{border-color:#a5a9b8}html.theme--catppuccin-latte .file-label:active .file-cta{background-color:#bdc2cf;color:#41445a}html.theme--catppuccin-latte .file-label:active .file-name{border-color:#9ea2b3}html.theme--catppuccin-latte .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte .file-name{border-color:#acb0be;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-latte .file-cta{background-color:#ccd0da;color:#4c4f69}html.theme--catppuccin-latte .file-name{border-color:#acb0be;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-latte .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-latte .file-icon .fa{font-size:14px}html.theme--catppuccin-latte .label{color:#41445a;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-latte .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-latte .label.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-latte .label.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .label.is-large{font-size:1.5rem}html.theme--catppuccin-latte .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-latte .help.is-white{color:#fff}html.theme--catppuccin-latte .help.is-black{color:#0a0a0a}html.theme--catppuccin-latte .help.is-light{color:#f5f5f5}html.theme--catppuccin-latte .help.is-dark,html.theme--catppuccin-latte .content kbd.help{color:#ccd0da}html.theme--catppuccin-latte .help.is-primary,html.theme--catppuccin-latte .docstring>section>a.help.docs-sourcelink{color:#1e66f5}html.theme--catppuccin-latte .help.is-link{color:#1e66f5}html.theme--catppuccin-latte .help.is-info{color:#179299}html.theme--catppuccin-latte .help.is-success{color:#40a02b}html.theme--catppuccin-latte .help.is-warning{color:#df8e1d}html.theme--catppuccin-latte .help.is-danger{color:#d20f39}html.theme--catppuccin-latte .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-latte .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-latte .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-latte .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-latte .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-latte .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-latte .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-latte .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-latte .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-latte .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field.is-horizontal{display:flex}}html.theme--catppuccin-latte .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-latte .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-latte .field-label.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-latte .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-latte .field-body .field{margin-bottom:0}html.theme--catppuccin-latte .field-body>.field{flex-shrink:1}html.theme--catppuccin-latte .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-latte .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-latte .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-latte .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right .select:focus~.icon{color:#ccd0da}html.theme--catppuccin-latte .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-latte .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-latte .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-latte .control.has-icons-left .icon,html.theme--catppuccin-latte .control.has-icons-right .icon{color:#acb0be;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-latte .control.has-icons-left .input,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-latte .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-latte .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-latte .control.has-icons-right .input,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-latte .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-latte .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-latte .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-latte .control.is-loading.is-small:after,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-latte .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-latte .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-latte .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-latte .breadcrumb a{align-items:center;color:#1e66f5;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-latte .breadcrumb a:hover{color:#04a5e5}html.theme--catppuccin-latte .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-latte .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-latte .breadcrumb li.is-active a{color:#41445a;cursor:default;pointer-events:none}html.theme--catppuccin-latte .breadcrumb li+li::before{color:#9ca0b0;content:"\0002f"}html.theme--catppuccin-latte .breadcrumb ul,html.theme--catppuccin-latte .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-latte .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-latte .breadcrumb.is-centered ol,html.theme--catppuccin-latte .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-latte .breadcrumb.is-right ol,html.theme--catppuccin-latte .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-latte .breadcrumb.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-latte .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-latte .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-latte .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-latte .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-latte .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-latte .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#4c4f69;max-width:100%;position:relative}html.theme--catppuccin-latte .card-footer:first-child,html.theme--catppuccin-latte .card-content:first-child,html.theme--catppuccin-latte .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-latte .card-footer:last-child,html.theme--catppuccin-latte .card-content:last-child,html.theme--catppuccin-latte .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-latte .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-latte .card-header-title{align-items:center;color:#41445a;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-latte .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-latte .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-latte .card-image{display:block;position:relative}html.theme--catppuccin-latte .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-latte .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-latte .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-latte .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-latte .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-latte .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-latte .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-latte .dropdown.is-active .dropdown-menu,html.theme--catppuccin-latte .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-latte .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-latte .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-latte .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-latte .dropdown-content{background-color:#e6e9ef;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-latte .dropdown-item{color:#4c4f69;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-latte a.dropdown-item,html.theme--catppuccin-latte button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-latte a.dropdown-item:hover,html.theme--catppuccin-latte button.dropdown-item:hover{background-color:#e6e9ef;color:#0a0a0a}html.theme--catppuccin-latte a.dropdown-item.is-active,html.theme--catppuccin-latte button.dropdown-item.is-active{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-latte .level{align-items:center;justify-content:space-between}html.theme--catppuccin-latte .level code{border-radius:.4em}html.theme--catppuccin-latte .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-latte .level.is-mobile{display:flex}html.theme--catppuccin-latte .level.is-mobile .level-left,html.theme--catppuccin-latte .level.is-mobile .level-right{display:flex}html.theme--catppuccin-latte .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-latte .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-latte .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level{display:flex}html.theme--catppuccin-latte .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-latte .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-latte .level-item .title,html.theme--catppuccin-latte .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-latte .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-latte .level-left,html.theme--catppuccin-latte .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .level-left .level-item.is-flexible,html.theme--catppuccin-latte .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-left .level-item:not(:last-child),html.theme--catppuccin-latte .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-latte .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-latte .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-left{display:flex}}html.theme--catppuccin-latte .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-right{display:flex}}html.theme--catppuccin-latte .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-latte .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-latte .media .media{border-top:1px solid rgba(172,176,190,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-latte .media .media .content:not(:last-child),html.theme--catppuccin-latte .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-latte .media .media .media{padding-top:.5rem}html.theme--catppuccin-latte .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-latte .media+.media{border-top:1px solid rgba(172,176,190,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-latte .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-latte .media-left,html.theme--catppuccin-latte .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .media-left{margin-right:1rem}html.theme--catppuccin-latte .media-right{margin-left:1rem}html.theme--catppuccin-latte .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-latte .media-content{overflow-x:auto}}html.theme--catppuccin-latte .menu{font-size:1rem}html.theme--catppuccin-latte .menu.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-latte .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .menu.is-large{font-size:1.5rem}html.theme--catppuccin-latte .menu-list{line-height:1.25}html.theme--catppuccin-latte .menu-list a{border-radius:3px;color:#4c4f69;display:block;padding:0.5em 0.75em}html.theme--catppuccin-latte .menu-list a:hover{background-color:#e6e9ef;color:#41445a}html.theme--catppuccin-latte .menu-list a.is-active{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .menu-list li ul{border-left:1px solid #acb0be;margin:.75em;padding-left:.75em}html.theme--catppuccin-latte .menu-label{color:#616587;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-latte .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-latte .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-latte .message{background-color:#e6e9ef;border-radius:.4em;font-size:1rem}html.theme--catppuccin-latte .message strong{color:currentColor}html.theme--catppuccin-latte .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-latte .message.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-latte .message.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .message.is-large{font-size:1.5rem}html.theme--catppuccin-latte .message.is-white{background-color:#fff}html.theme--catppuccin-latte .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-latte .message.is-black{background-color:#fafafa}html.theme--catppuccin-latte .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-latte .message.is-light{background-color:#fafafa}html.theme--catppuccin-latte .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-latte .message.is-dark,html.theme--catppuccin-latte .content kbd.message{background-color:#f9fafb}html.theme--catppuccin-latte .message.is-dark .message-header,html.theme--catppuccin-latte .content kbd.message .message-header{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .message.is-dark .message-body,html.theme--catppuccin-latte .content kbd.message .message-body{border-color:#ccd0da}html.theme--catppuccin-latte .message.is-primary,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink{background-color:#ebf2fe}html.theme--catppuccin-latte .message.is-primary .message-header,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink .message-header{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .message.is-primary .message-body,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink .message-body{border-color:#1e66f5;color:#0a52e1}html.theme--catppuccin-latte .message.is-link{background-color:#ebf2fe}html.theme--catppuccin-latte .message.is-link .message-header{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .message.is-link .message-body{border-color:#1e66f5;color:#0a52e1}html.theme--catppuccin-latte .message.is-info{background-color:#edfcfc}html.theme--catppuccin-latte .message.is-info .message-header{background-color:#179299;color:#fff}html.theme--catppuccin-latte .message.is-info .message-body{border-color:#179299;color:#1cb2ba}html.theme--catppuccin-latte .message.is-success{background-color:#f1fbef}html.theme--catppuccin-latte .message.is-success .message-header{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .message.is-success .message-body{border-color:#40a02b;color:#40a12b}html.theme--catppuccin-latte .message.is-warning{background-color:#fdf6ed}html.theme--catppuccin-latte .message.is-warning .message-header{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .message.is-warning .message-body{border-color:#df8e1d;color:#9e6515}html.theme--catppuccin-latte .message.is-danger{background-color:#feecf0}html.theme--catppuccin-latte .message.is-danger .message-header{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .message.is-danger .message-body{border-color:#d20f39;color:#e9113f}html.theme--catppuccin-latte .message-header{align-items:center;background-color:#4c4f69;border-radius:.4em .4em 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-latte .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-latte .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .message-body{border-color:#acb0be;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#4c4f69;padding:1.25em 1.5em}html.theme--catppuccin-latte .message-body code,html.theme--catppuccin-latte .message-body pre{background-color:#fff}html.theme--catppuccin-latte .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-latte .modal.is-active{display:flex}html.theme--catppuccin-latte .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-latte .modal-content,html.theme--catppuccin-latte .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-latte .modal-content,html.theme--catppuccin-latte .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-latte .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-latte .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-latte .modal-card-head,html.theme--catppuccin-latte .modal-card-foot{align-items:center;background-color:#e6e9ef;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-latte .modal-card-head{border-bottom:1px solid #acb0be;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-latte .modal-card-title{color:#4c4f69;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-latte .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #acb0be}html.theme--catppuccin-latte .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-latte .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#eff1f5;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-latte .navbar{background-color:#1e66f5;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-latte .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-latte .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-latte .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-latte .navbar.is-dark,html.theme--catppuccin-latte .content kbd.navbar{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-burger,html.theme--catppuccin-latte .content kbd.navbar .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#ccd0da;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-latte .navbar.is-primary,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-burger,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5;color:#fff}}html.theme--catppuccin-latte .navbar.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5;color:#fff}}html.theme--catppuccin-latte .navbar.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#179299;color:#fff}}html.theme--catppuccin-latte .navbar.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#40a02b;color:#fff}}html.theme--catppuccin-latte .navbar.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#df8e1d;color:#fff}}html.theme--catppuccin-latte .navbar.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#d20f39;color:#fff}}html.theme--catppuccin-latte .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-latte .navbar.has-shadow{box-shadow:0 2px 0 0 #e6e9ef}html.theme--catppuccin-latte .navbar.is-fixed-bottom,html.theme--catppuccin-latte .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #e6e9ef}html.theme--catppuccin-latte .navbar.is-fixed-top{top:0}html.theme--catppuccin-latte html.has-navbar-fixed-top,html.theme--catppuccin-latte body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom,html.theme--catppuccin-latte body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-latte .navbar-brand,html.theme--catppuccin-latte .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-latte .navbar-brand a.navbar-item:focus,html.theme--catppuccin-latte .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-latte .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-latte .navbar-burger{color:#4c4f69;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-latte .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--catppuccin-latte .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-latte .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-latte .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-latte .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-latte .navbar-menu{display:none}html.theme--catppuccin-latte .navbar-item,html.theme--catppuccin-latte .navbar-link{color:#4c4f69;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-latte .navbar-item .icon:only-child,html.theme--catppuccin-latte .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-latte a.navbar-item,html.theme--catppuccin-latte .navbar-link{cursor:pointer}html.theme--catppuccin-latte a.navbar-item:focus,html.theme--catppuccin-latte a.navbar-item:focus-within,html.theme--catppuccin-latte a.navbar-item:hover,html.theme--catppuccin-latte a.navbar-item.is-active,html.theme--catppuccin-latte .navbar-link:focus,html.theme--catppuccin-latte .navbar-link:focus-within,html.theme--catppuccin-latte .navbar-link:hover,html.theme--catppuccin-latte .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}html.theme--catppuccin-latte .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .navbar-item img{max-height:1.75rem}html.theme--catppuccin-latte .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-latte .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-latte .navbar-item.is-tab:focus,html.theme--catppuccin-latte .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1e66f5}html.theme--catppuccin-latte .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1e66f5;border-bottom-style:solid;border-bottom-width:3px;color:#1e66f5;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-latte .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-latte .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-latte .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-latte .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .navbar>.container{display:block}html.theme--catppuccin-latte .navbar-brand .navbar-item,html.theme--catppuccin-latte .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-latte .navbar-link::after{display:none}html.theme--catppuccin-latte .navbar-menu{background-color:#1e66f5;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-latte .navbar-menu.is-active{display:block}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch,html.theme--catppuccin-latte .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-latte .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-latte .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-latte .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-latte html.has-navbar-fixed-top-touch,html.theme--catppuccin-latte body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-latte body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar,html.theme--catppuccin-latte .navbar-menu,html.theme--catppuccin-latte .navbar-start,html.theme--catppuccin-latte .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-latte .navbar{min-height:4rem}html.theme--catppuccin-latte .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-latte .navbar.is-spaced .navbar-start,html.theme--catppuccin-latte .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-latte .navbar.is-spaced a.navbar-item,html.theme--catppuccin-latte .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8c8fa1}html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}html.theme--catppuccin-latte .navbar-burger{display:none}html.theme--catppuccin-latte .navbar-item,html.theme--catppuccin-latte .navbar-link{align-items:center;display:flex}html.theme--catppuccin-latte .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-latte .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-latte .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-latte .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-latte .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-latte .navbar-dropdown{background-color:#1e66f5;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-latte .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-latte .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8c8fa1}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}.navbar.is-spaced html.theme--catppuccin-latte .navbar-dropdown,html.theme--catppuccin-latte .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-latte .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-latte .navbar-divider{display:block}html.theme--catppuccin-latte .navbar>.container .navbar-brand,html.theme--catppuccin-latte .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-latte .navbar>.container .navbar-menu,html.theme--catppuccin-latte .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-latte .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-latte .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-latte html.has-navbar-fixed-top-desktop,html.theme--catppuccin-latte body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-latte body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-latte html.has-spaced-navbar-fixed-top,html.theme--catppuccin-latte body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-latte html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-latte body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-latte a.navbar-item.is-active,html.theme--catppuccin-latte .navbar-link.is-active{color:#1e66f5}html.theme--catppuccin-latte a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-latte .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-latte .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-latte .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-latte .pagination.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-latte .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-latte .pagination.is-rounded .pagination-previous,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-latte .pagination.is-rounded .pagination-next,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-latte .pagination.is-rounded .pagination-link,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-latte .pagination,html.theme--catppuccin-latte .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link{border-color:#acb0be;color:#1e66f5;min-width:2.5em}html.theme--catppuccin-latte .pagination-previous:hover,html.theme--catppuccin-latte .pagination-next:hover,html.theme--catppuccin-latte .pagination-link:hover{border-color:#9ca0b0;color:#04a5e5}html.theme--catppuccin-latte .pagination-previous:focus,html.theme--catppuccin-latte .pagination-next:focus,html.theme--catppuccin-latte .pagination-link:focus{border-color:#9ca0b0}html.theme--catppuccin-latte .pagination-previous:active,html.theme--catppuccin-latte .pagination-next:active,html.theme--catppuccin-latte .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-latte .pagination-previous[disabled],html.theme--catppuccin-latte .pagination-previous.is-disabled,html.theme--catppuccin-latte .pagination-next[disabled],html.theme--catppuccin-latte .pagination-next.is-disabled,html.theme--catppuccin-latte .pagination-link[disabled],html.theme--catppuccin-latte .pagination-link.is-disabled{background-color:#acb0be;border-color:#acb0be;box-shadow:none;color:#616587;opacity:0.5}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-latte .pagination-link.is-current{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .pagination-ellipsis{color:#9ca0b0;pointer-events:none}html.theme--catppuccin-latte .pagination-list{flex-wrap:wrap}html.theme--catppuccin-latte .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-latte .pagination{flex-wrap:wrap}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-latte .pagination-previous{order:2}html.theme--catppuccin-latte .pagination-next{order:3}html.theme--catppuccin-latte .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-latte .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-latte .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-latte .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-latte .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-latte .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-latte .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-latte .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-latte .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-latte .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-latte .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-latte .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-latte .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-latte .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-latte .panel.is-dark .panel-heading,html.theme--catppuccin-latte .content kbd.panel .panel-heading{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-latte .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#ccd0da}html.theme--catppuccin-latte .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-latte .content kbd.panel .panel-block.is-active .panel-icon{color:#ccd0da}html.theme--catppuccin-latte .panel.is-primary .panel-heading,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#1e66f5}html.theme--catppuccin-latte .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel.is-link .panel-heading{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1e66f5}html.theme--catppuccin-latte .panel.is-link .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel.is-info .panel-heading{background-color:#179299;color:#fff}html.theme--catppuccin-latte .panel.is-info .panel-tabs a.is-active{border-bottom-color:#179299}html.theme--catppuccin-latte .panel.is-info .panel-block.is-active .panel-icon{color:#179299}html.theme--catppuccin-latte .panel.is-success .panel-heading{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .panel.is-success .panel-tabs a.is-active{border-bottom-color:#40a02b}html.theme--catppuccin-latte .panel.is-success .panel-block.is-active .panel-icon{color:#40a02b}html.theme--catppuccin-latte .panel.is-warning .panel-heading{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#df8e1d}html.theme--catppuccin-latte .panel.is-warning .panel-block.is-active .panel-icon{color:#df8e1d}html.theme--catppuccin-latte .panel.is-danger .panel-heading{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#d20f39}html.theme--catppuccin-latte .panel.is-danger .panel-block.is-active .panel-icon{color:#d20f39}html.theme--catppuccin-latte .panel-tabs:not(:last-child),html.theme--catppuccin-latte .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-latte .panel-heading{background-color:#bcc0cc;border-radius:8px 8px 0 0;color:#41445a;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-latte .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-latte .panel-tabs a{border-bottom:1px solid #acb0be;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-latte .panel-tabs a.is-active{border-bottom-color:#bcc0cc;color:#0b57ef}html.theme--catppuccin-latte .panel-list a{color:#4c4f69}html.theme--catppuccin-latte .panel-list a:hover{color:#1e66f5}html.theme--catppuccin-latte .panel-block{align-items:center;color:#41445a;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-latte .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-latte .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-latte .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-latte .panel-block.is-active{border-left-color:#1e66f5;color:#0b57ef}html.theme--catppuccin-latte .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-latte a.panel-block,html.theme--catppuccin-latte label.panel-block{cursor:pointer}html.theme--catppuccin-latte a.panel-block:hover,html.theme--catppuccin-latte label.panel-block:hover{background-color:#e6e9ef}html.theme--catppuccin-latte .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#616587;margin-right:.75em}html.theme--catppuccin-latte .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-latte .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--catppuccin-latte .tabs a{align-items:center;border-bottom-color:#acb0be;border-bottom-style:solid;border-bottom-width:1px;color:#4c4f69;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-latte .tabs a:hover{border-bottom-color:#41445a;color:#41445a}html.theme--catppuccin-latte .tabs li{display:block}html.theme--catppuccin-latte .tabs li.is-active a{border-bottom-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .tabs ul{align-items:center;border-bottom-color:#acb0be;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-latte .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-latte .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-latte .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-latte .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-latte .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-latte .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-latte .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-latte .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-latte .tabs.is-boxed a:hover{background-color:#e6e9ef;border-bottom-color:#acb0be}html.theme--catppuccin-latte .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#acb0be;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-latte .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .tabs.is-toggle a{border-color:#acb0be;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-latte .tabs.is-toggle a:hover{background-color:#e6e9ef;border-color:#9ca0b0;z-index:2}html.theme--catppuccin-latte .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-latte .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-latte .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-latte .tabs.is-toggle li.is-active a{background-color:#1e66f5;border-color:#1e66f5;color:#fff;z-index:1}html.theme--catppuccin-latte .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-latte .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-latte .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-latte .tabs.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-latte .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-latte .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-latte .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-latte .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-latte .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-latte .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-latte .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-latte .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-latte .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-latte .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .column.is-narrow,html.theme--catppuccin-latte .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full,html.theme--catppuccin-latte .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters,html.theme--catppuccin-latte .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds,html.theme--catppuccin-latte .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half,html.theme--catppuccin-latte .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third,html.theme--catppuccin-latte .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter,html.theme--catppuccin-latte .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth,html.theme--catppuccin-latte .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths,html.theme--catppuccin-latte .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths,html.theme--catppuccin-latte .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths,html.theme--catppuccin-latte .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters,html.theme--catppuccin-latte .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds,html.theme--catppuccin-latte .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half,html.theme--catppuccin-latte .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third,html.theme--catppuccin-latte .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter,html.theme--catppuccin-latte .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth,html.theme--catppuccin-latte .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths,html.theme--catppuccin-latte .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths,html.theme--catppuccin-latte .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths,html.theme--catppuccin-latte .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-latte .column.is-0,html.theme--catppuccin-latte .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0,html.theme--catppuccin-latte .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-latte .column.is-1,html.theme--catppuccin-latte .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1,html.theme--catppuccin-latte .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2,html.theme--catppuccin-latte .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2,html.theme--catppuccin-latte .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3,html.theme--catppuccin-latte .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3,html.theme--catppuccin-latte .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-latte .column.is-4,html.theme--catppuccin-latte .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4,html.theme--catppuccin-latte .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5,html.theme--catppuccin-latte .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5,html.theme--catppuccin-latte .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6,html.theme--catppuccin-latte .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6,html.theme--catppuccin-latte .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-latte .column.is-7,html.theme--catppuccin-latte .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7,html.theme--catppuccin-latte .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8,html.theme--catppuccin-latte .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8,html.theme--catppuccin-latte .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9,html.theme--catppuccin-latte .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9,html.theme--catppuccin-latte .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-latte .column.is-10,html.theme--catppuccin-latte .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10,html.theme--catppuccin-latte .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11,html.theme--catppuccin-latte .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11,html.theme--catppuccin-latte .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12,html.theme--catppuccin-latte .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12,html.theme--catppuccin-latte .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-latte .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-latte .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-latte .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-latte .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-latte .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-latte .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-latte .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-latte .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-latte .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-latte .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-latte .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-latte .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-latte .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-latte .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-latte .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-latte .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-latte .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-latte .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-latte .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-latte .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-latte .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-latte .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-latte .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-latte .columns.is-centered{justify-content:center}html.theme--catppuccin-latte .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-latte .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-latte .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-latte .columns.is-mobile{display:flex}html.theme--catppuccin-latte .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-latte .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-desktop{display:flex}}html.theme--catppuccin-latte .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-latte .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-latte .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-latte .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-latte .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-latte .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-latte .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-latte .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-latte .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-latte .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-latte .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-latte .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-latte .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-latte .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-latte .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-latte .tile.is-child{margin:0 !important}html.theme--catppuccin-latte .tile.is-parent{padding:.75rem}html.theme--catppuccin-latte .tile.is-vertical{flex-direction:column}html.theme--catppuccin-latte .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .tile:not(.is-child){display:flex}html.theme--catppuccin-latte .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-latte .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-latte .tile.is-3{flex:none;width:25%}html.theme--catppuccin-latte .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-latte .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-latte .tile.is-6{flex:none;width:50%}html.theme--catppuccin-latte .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-latte .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-latte .tile.is-9{flex:none;width:75%}html.theme--catppuccin-latte .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-latte .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-latte .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-latte .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-latte .hero .navbar{background:none}html.theme--catppuccin-latte .hero .tabs ul{border-bottom:none}html.theme--catppuccin-latte .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-white strong{color:inherit}html.theme--catppuccin-latte .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-latte .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-latte .hero.is-white .navbar-item,html.theme--catppuccin-latte .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-latte .hero.is-white a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-white .navbar-link:hover,html.theme--catppuccin-latte .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-latte .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-latte .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-black strong{color:inherit}html.theme--catppuccin-latte .hero.is-black .title{color:#fff}html.theme--catppuccin-latte .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-latte .hero.is-black .navbar-item,html.theme--catppuccin-latte .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-black a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-black .navbar-link:hover,html.theme--catppuccin-latte .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-latte .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-light strong{color:inherit}html.theme--catppuccin-latte .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-latte .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-latte .hero.is-light .navbar-item,html.theme--catppuccin-latte .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-light .navbar-link:hover,html.theme--catppuccin-latte .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-latte .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-latte .hero.is-dark,html.theme--catppuccin-latte .content kbd.hero{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-dark strong,html.theme--catppuccin-latte .content kbd.hero strong{color:inherit}html.theme--catppuccin-latte .hero.is-dark .title,html.theme--catppuccin-latte .content kbd.hero .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .subtitle,html.theme--catppuccin-latte .content kbd.hero .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-latte .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-latte .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-dark .subtitle strong,html.theme--catppuccin-latte .content kbd.hero .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-dark .navbar-menu,html.theme--catppuccin-latte .content kbd.hero .navbar-menu{background-color:#ccd0da}}html.theme--catppuccin-latte .hero.is-dark .navbar-item,html.theme--catppuccin-latte .content kbd.hero .navbar-item,html.theme--catppuccin-latte .hero.is-dark .navbar-link,html.theme--catppuccin-latte .content kbd.hero .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-dark .navbar-link:hover,html.theme--catppuccin-latte .content kbd.hero .navbar-link:hover,html.theme--catppuccin-latte .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.hero .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .tabs a,html.theme--catppuccin-latte .content kbd.hero .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-latte .hero.is-dark .tabs a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs li.is-active a{color:#ccd0da !important;opacity:1}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .hero.is-dark.is-bold,html.theme--catppuccin-latte .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #a7b8cc 0%, #ccd0da 71%, #d9dbe6 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-latte .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a7b8cc 0%, #ccd0da 71%, #d9dbe6 100%)}}html.theme--catppuccin-latte .hero.is-primary,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-primary strong,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-latte .hero.is-primary .title,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-latte .hero.is-primary .subtitle,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-primary .subtitle strong,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-primary .navbar-menu,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#1e66f5}}html.theme--catppuccin-latte .hero.is-primary .navbar-item,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-latte .hero.is-primary .navbar-link,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-primary .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-latte .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .hero.is-primary .tabs a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-primary .tabs a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#1e66f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .hero.is-primary.is-bold,html.theme--catppuccin-latte .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-latte .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}}html.theme--catppuccin-latte .hero.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-link strong{color:inherit}html.theme--catppuccin-latte .hero.is-link .title{color:#fff}html.theme--catppuccin-latte .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-link .navbar-menu{background-color:#1e66f5}}html.theme--catppuccin-latte .hero.is-link .navbar-item,html.theme--catppuccin-latte .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-link a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-link .navbar-link:hover,html.theme--catppuccin-latte .hero.is-link .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-link .tabs li.is-active a{color:#1e66f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}}html.theme--catppuccin-latte .hero.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-info strong{color:inherit}html.theme--catppuccin-latte .hero.is-info .title{color:#fff}html.theme--catppuccin-latte .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-info .navbar-menu{background-color:#179299}}html.theme--catppuccin-latte .hero.is-info .navbar-item,html.theme--catppuccin-latte .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-info a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-info .navbar-link:hover,html.theme--catppuccin-latte .hero.is-info .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-info .tabs li.is-active a{color:#179299 !important;opacity:1}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#179299}html.theme--catppuccin-latte .hero.is-info.is-bold{background-image:linear-gradient(141deg, #0a7367 0%, #179299 71%, #1591b4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0a7367 0%, #179299 71%, #1591b4 100%)}}html.theme--catppuccin-latte .hero.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-success strong{color:inherit}html.theme--catppuccin-latte .hero.is-success .title{color:#fff}html.theme--catppuccin-latte .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-success .navbar-menu{background-color:#40a02b}}html.theme--catppuccin-latte .hero.is-success .navbar-item,html.theme--catppuccin-latte .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-success a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-success .navbar-link:hover,html.theme--catppuccin-latte .hero.is-success .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-success .tabs li.is-active a{color:#40a02b !important;opacity:1}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#40a02b}html.theme--catppuccin-latte .hero.is-success.is-bold{background-image:linear-gradient(141deg, #3c7f19 0%, #40a02b 71%, #2dba2b 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #3c7f19 0%, #40a02b 71%, #2dba2b 100%)}}html.theme--catppuccin-latte .hero.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-warning strong{color:inherit}html.theme--catppuccin-latte .hero.is-warning .title{color:#fff}html.theme--catppuccin-latte .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-warning .navbar-menu{background-color:#df8e1d}}html.theme--catppuccin-latte .hero.is-warning .navbar-item,html.theme--catppuccin-latte .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-warning .navbar-link:hover,html.theme--catppuccin-latte .hero.is-warning .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-warning .tabs li.is-active a{color:#df8e1d !important;opacity:1}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #bc560d 0%, #df8e1d 71%, #eaba2b 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #bc560d 0%, #df8e1d 71%, #eaba2b 100%)}}html.theme--catppuccin-latte .hero.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-danger strong{color:inherit}html.theme--catppuccin-latte .hero.is-danger .title{color:#fff}html.theme--catppuccin-latte .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-danger .navbar-menu{background-color:#d20f39}}html.theme--catppuccin-latte .hero.is-danger .navbar-item,html.theme--catppuccin-latte .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-danger .navbar-link:hover,html.theme--catppuccin-latte .hero.is-danger .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-danger .tabs li.is-active a{color:#d20f39 !important;opacity:1}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#d20f39}html.theme--catppuccin-latte .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ab0343 0%, #d20f39 71%, #f00a16 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ab0343 0%, #d20f39 71%, #f00a16 100%)}}html.theme--catppuccin-latte .hero.is-small .hero-body,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-latte .hero.is-halfheight .hero-body,html.theme--catppuccin-latte .hero.is-fullheight .hero-body,html.theme--catppuccin-latte .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-latte .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-latte .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-latte .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-latte .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-latte .hero-video{overflow:hidden}html.theme--catppuccin-latte .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-latte .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero-video{display:none}}html.theme--catppuccin-latte .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero-buttons .button{display:flex}html.theme--catppuccin-latte .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-latte .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-latte .hero-head,html.theme--catppuccin-latte .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero-body{padding:3rem 3rem}}html.theme--catppuccin-latte .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .section{padding:3rem 3rem}html.theme--catppuccin-latte .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-latte .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-latte .footer{background-color:#e6e9ef;padding:3rem 1.5rem 6rem}html.theme--catppuccin-latte h1 .docs-heading-anchor,html.theme--catppuccin-latte h1 .docs-heading-anchor:hover,html.theme--catppuccin-latte h1 .docs-heading-anchor:visited,html.theme--catppuccin-latte h2 .docs-heading-anchor,html.theme--catppuccin-latte h2 .docs-heading-anchor:hover,html.theme--catppuccin-latte h2 .docs-heading-anchor:visited,html.theme--catppuccin-latte h3 .docs-heading-anchor,html.theme--catppuccin-latte h3 .docs-heading-anchor:hover,html.theme--catppuccin-latte h3 .docs-heading-anchor:visited,html.theme--catppuccin-latte h4 .docs-heading-anchor,html.theme--catppuccin-latte h4 .docs-heading-anchor:hover,html.theme--catppuccin-latte h4 .docs-heading-anchor:visited,html.theme--catppuccin-latte h5 .docs-heading-anchor,html.theme--catppuccin-latte h5 .docs-heading-anchor:hover,html.theme--catppuccin-latte h5 .docs-heading-anchor:visited,html.theme--catppuccin-latte h6 .docs-heading-anchor,html.theme--catppuccin-latte h6 .docs-heading-anchor:hover,html.theme--catppuccin-latte h6 .docs-heading-anchor:visited{color:#4c4f69}html.theme--catppuccin-latte h1 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h2 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h3 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h4 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h5 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-latte h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-latte h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-latte .docs-dark-only{display:none !important}html.theme--catppuccin-latte pre{position:relative;overflow:hidden}html.theme--catppuccin-latte pre code,html.theme--catppuccin-latte pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-latte pre code:first-of-type,html.theme--catppuccin-latte pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-latte pre code:last-of-type,html.theme--catppuccin-latte pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-latte pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#4c4f69;cursor:pointer;text-align:center}html.theme--catppuccin-latte pre .copy-button:focus,html.theme--catppuccin-latte pre .copy-button:hover{opacity:1;background:rgba(76,79,105,0.1);color:#1e66f5}html.theme--catppuccin-latte pre .copy-button.success{color:#40a02b;opacity:1}html.theme--catppuccin-latte pre .copy-button.error{color:#d20f39;opacity:1}html.theme--catppuccin-latte pre:hover .copy-button{opacity:1}html.theme--catppuccin-latte .admonition{background-color:#e6e9ef;border-style:solid;border-width:2px;border-color:#5c5f77;border-radius:4px;font-size:1rem}html.theme--catppuccin-latte .admonition strong{color:currentColor}html.theme--catppuccin-latte .admonition.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-latte .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-latte .admonition.is-default{background-color:#e6e9ef;border-color:#5c5f77}html.theme--catppuccin-latte .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#5c5f77}html.theme--catppuccin-latte .admonition.is-default>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-info{background-color:#e6e9ef;border-color:#179299}html.theme--catppuccin-latte .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#179299}html.theme--catppuccin-latte .admonition.is-info>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-success{background-color:#e6e9ef;border-color:#40a02b}html.theme--catppuccin-latte .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#40a02b}html.theme--catppuccin-latte .admonition.is-success>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-warning{background-color:#e6e9ef;border-color:#df8e1d}html.theme--catppuccin-latte .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#df8e1d}html.theme--catppuccin-latte .admonition.is-warning>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-danger{background-color:#e6e9ef;border-color:#d20f39}html.theme--catppuccin-latte .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#d20f39}html.theme--catppuccin-latte .admonition.is-danger>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-compat{background-color:#e6e9ef;border-color:#04a5e5}html.theme--catppuccin-latte .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#04a5e5}html.theme--catppuccin-latte .admonition.is-compat>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition-header{color:#5c5f77;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-latte .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-latte details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-latte details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-latte details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-latte .admonition-body{color:#4c4f69;padding:0.5rem .75rem}html.theme--catppuccin-latte .admonition-body pre{background-color:#e6e9ef}html.theme--catppuccin-latte .admonition-body code{background-color:#e6e9ef}html.theme--catppuccin-latte .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #acb0be;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-latte .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#e6e9ef;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #acb0be;overflow:auto}html.theme--catppuccin-latte .docstring>header code{background-color:transparent}html.theme--catppuccin-latte .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-latte .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-latte .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-latte .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #acb0be}html.theme--catppuccin-latte .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-latte .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-latte .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-latte .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-latte .documenter-example-output{background-color:#eff1f5}html.theme--catppuccin-latte .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#e6e9ef;color:#4c4f69;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-latte .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-latte .outdated-warning-overlay a{color:#1e66f5}html.theme--catppuccin-latte .outdated-warning-overlay a:hover{color:#04a5e5}html.theme--catppuccin-latte .content pre{border:2px solid #acb0be;border-radius:4px}html.theme--catppuccin-latte .content code{font-weight:inherit}html.theme--catppuccin-latte .content a code{color:#1e66f5}html.theme--catppuccin-latte .content a:hover code{color:#04a5e5}html.theme--catppuccin-latte .content h1 code,html.theme--catppuccin-latte .content h2 code,html.theme--catppuccin-latte .content h3 code,html.theme--catppuccin-latte .content h4 code,html.theme--catppuccin-latte .content h5 code,html.theme--catppuccin-latte .content h6 code{color:#4c4f69}html.theme--catppuccin-latte .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-latte .content blockquote>ul:first-child,html.theme--catppuccin-latte .content blockquote>ol:first-child,html.theme--catppuccin-latte .content .admonition-body>ul:first-child,html.theme--catppuccin-latte .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-latte pre,html.theme--catppuccin-latte code{font-variant-ligatures:no-contextual}html.theme--catppuccin-latte .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-latte .breadcrumb a.is-disabled,html.theme--catppuccin-latte .breadcrumb a.is-disabled:hover{color:#41445a}html.theme--catppuccin-latte .hljs{background:initial !important}html.theme--catppuccin-latte .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-latte .katex-display,html.theme--catppuccin-latte mjx-container,html.theme--catppuccin-latte .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-latte html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-latte li.no-marker{list-style:none}html.theme--catppuccin-latte #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-latte #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main{width:100%}html.theme--catppuccin-latte #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-latte #documenter .docs-main>header,html.theme--catppuccin-latte #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar{background-color:#eff1f5;border-bottom:1px solid #acb0be;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-latte #documenter .docs-main section.footnotes{border-top:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-latte .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-latte #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #acb0be;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-latte #documenter .docs-sidebar{display:flex;flex-direction:column;color:#4c4f69;background-color:#e6e9ef;border-right:1px solid #acb0be;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-latte #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name a:hover{color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #acb0be;display:none;padding:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #acb0be;padding-bottom:1.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#4c4f69;background:#e6e9ef}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#4c4f69;background-color:#f2f4f7}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #acb0be;border-bottom:1px solid #acb0be;background-color:#dce0e8}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#dce0e8;color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#f2f4f7;color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-latte #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#fff}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#fff}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#fff}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#fff}}html.theme--catppuccin-latte kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-latte .search-min-width-50{min-width:50%}html.theme--catppuccin-latte .search-min-height-100{min-height:100%}html.theme--catppuccin-latte .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-latte .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover,html.theme--catppuccin-latte .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-latte .search-result-link .property-search-result-badge,html.theme--catppuccin-latte .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-latte .property-search-result-badge,html.theme--catppuccin-latte .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-latte .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:hover .search-filter,html.theme--catppuccin-latte .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-latte .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-latte .search-filter:hover,html.theme--catppuccin-latte .search-filter:focus{color:#333}html.theme--catppuccin-latte .search-filter-selected{color:#ccd0da;background-color:#7287fd}html.theme--catppuccin-latte .search-filter-selected:hover,html.theme--catppuccin-latte .search-filter-selected:focus{color:#ccd0da}html.theme--catppuccin-latte .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-latte .search-divider{border-bottom:1px solid #acb0be}html.theme--catppuccin-latte .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-latte .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-latte .w-100{width:100%}html.theme--catppuccin-latte .gap-2{gap:0.5rem}html.theme--catppuccin-latte .gap-4{gap:1rem}html.theme--catppuccin-latte .gap-8{gap:2rem}html.theme--catppuccin-latte{background-color:#eff1f5;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-latte a{transition:all 200ms ease}html.theme--catppuccin-latte .label{color:#4c4f69}html.theme--catppuccin-latte .button,html.theme--catppuccin-latte .control.has-icons-left .icon,html.theme--catppuccin-latte .control.has-icons-right .icon,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .select,html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea{height:2.5em;color:#4c4f69}html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#4c4f69}html.theme--catppuccin-latte .select:after,html.theme--catppuccin-latte .select select{border-width:1px}html.theme--catppuccin-latte .menu-list a{transition:all 300ms ease}html.theme--catppuccin-latte .modal-card-foot,html.theme--catppuccin-latte .modal-card-head{border-color:#acb0be}html.theme--catppuccin-latte .navbar{border-radius:.4em}html.theme--catppuccin-latte .navbar.is-transparent{background:none}html.theme--catppuccin-latte .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .navbar .navbar-menu{background-color:#1e66f5;border-radius:0 0 .4em .4em}}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){color:#ccd0da}html.theme--catppuccin-latte .tag.is-link:not(body),html.theme--catppuccin-latte .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-latte .content kbd.is-link:not(body){color:#ccd0da}html.theme--catppuccin-latte .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-latte .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-latte .ansi span.sgr3{font-style:italic}html.theme--catppuccin-latte .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-latte .ansi span.sgr7{color:#eff1f5;background-color:#4c4f69}html.theme--catppuccin-latte .ansi span.sgr8{color:transparent}html.theme--catppuccin-latte .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-latte .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-latte .ansi span.sgr30{color:#5c5f77}html.theme--catppuccin-latte .ansi span.sgr31{color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr32{color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr33{color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr34{color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr35{color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr36{color:#179299}html.theme--catppuccin-latte .ansi span.sgr37{color:#acb0be}html.theme--catppuccin-latte .ansi span.sgr40{background-color:#5c5f77}html.theme--catppuccin-latte .ansi span.sgr41{background-color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr42{background-color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr43{background-color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr44{background-color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr45{background-color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr46{background-color:#179299}html.theme--catppuccin-latte .ansi span.sgr47{background-color:#acb0be}html.theme--catppuccin-latte .ansi span.sgr90{color:#6c6f85}html.theme--catppuccin-latte .ansi span.sgr91{color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr92{color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr93{color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr94{color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr95{color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr96{color:#179299}html.theme--catppuccin-latte .ansi span.sgr97{color:#bcc0cc}html.theme--catppuccin-latte .ansi span.sgr100{background-color:#6c6f85}html.theme--catppuccin-latte .ansi span.sgr101{background-color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr102{background-color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr103{background-color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr104{background-color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr105{background-color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr106{background-color:#179299}html.theme--catppuccin-latte .ansi span.sgr107{background-color:#bcc0cc}html.theme--catppuccin-latte code.language-julia-repl>span.hljs-meta{color:#40a02b;font-weight:bolder}html.theme--catppuccin-latte code .hljs{color:#4c4f69;background:#eff1f5}html.theme--catppuccin-latte code .hljs-keyword{color:#8839ef}html.theme--catppuccin-latte code .hljs-built_in{color:#d20f39}html.theme--catppuccin-latte code .hljs-type{color:#df8e1d}html.theme--catppuccin-latte code .hljs-literal{color:#fe640b}html.theme--catppuccin-latte code .hljs-number{color:#fe640b}html.theme--catppuccin-latte code .hljs-operator{color:#179299}html.theme--catppuccin-latte code .hljs-punctuation{color:#5c5f77}html.theme--catppuccin-latte code .hljs-property{color:#179299}html.theme--catppuccin-latte code .hljs-regexp{color:#ea76cb}html.theme--catppuccin-latte code .hljs-string{color:#40a02b}html.theme--catppuccin-latte code .hljs-char.escape_{color:#40a02b}html.theme--catppuccin-latte code .hljs-subst{color:#6c6f85}html.theme--catppuccin-latte code .hljs-symbol{color:#dd7878}html.theme--catppuccin-latte code .hljs-variable{color:#8839ef}html.theme--catppuccin-latte code .hljs-variable.language_{color:#8839ef}html.theme--catppuccin-latte code .hljs-variable.constant_{color:#fe640b}html.theme--catppuccin-latte code .hljs-title{color:#1e66f5}html.theme--catppuccin-latte code .hljs-title.class_{color:#df8e1d}html.theme--catppuccin-latte code .hljs-title.function_{color:#1e66f5}html.theme--catppuccin-latte code .hljs-params{color:#4c4f69}html.theme--catppuccin-latte code .hljs-comment{color:#acb0be}html.theme--catppuccin-latte code .hljs-doctag{color:#d20f39}html.theme--catppuccin-latte code .hljs-meta{color:#fe640b}html.theme--catppuccin-latte code .hljs-section{color:#1e66f5}html.theme--catppuccin-latte code .hljs-tag{color:#6c6f85}html.theme--catppuccin-latte code .hljs-name{color:#8839ef}html.theme--catppuccin-latte code .hljs-attr{color:#1e66f5}html.theme--catppuccin-latte code .hljs-attribute{color:#40a02b}html.theme--catppuccin-latte code .hljs-bullet{color:#179299}html.theme--catppuccin-latte code .hljs-code{color:#40a02b}html.theme--catppuccin-latte code .hljs-emphasis{color:#d20f39;font-style:italic}html.theme--catppuccin-latte code .hljs-strong{color:#d20f39;font-weight:bold}html.theme--catppuccin-latte code .hljs-formula{color:#179299}html.theme--catppuccin-latte code .hljs-link{color:#209fb5;font-style:italic}html.theme--catppuccin-latte code .hljs-quote{color:#40a02b;font-style:italic}html.theme--catppuccin-latte code .hljs-selector-tag{color:#df8e1d}html.theme--catppuccin-latte code .hljs-selector-id{color:#1e66f5}html.theme--catppuccin-latte code .hljs-selector-class{color:#179299}html.theme--catppuccin-latte code .hljs-selector-attr{color:#8839ef}html.theme--catppuccin-latte code .hljs-selector-pseudo{color:#179299}html.theme--catppuccin-latte code .hljs-template-tag{color:#dd7878}html.theme--catppuccin-latte code .hljs-template-variable{color:#dd7878}html.theme--catppuccin-latte code .hljs-addition{color:#40a02b;background:rgba(166,227,161,0.15)}html.theme--catppuccin-latte code .hljs-deletion{color:#d20f39;background:rgba(243,139,168,0.15)}html.theme--catppuccin-latte .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover,html.theme--catppuccin-latte .search-result-link:focus{background-color:#ccd0da}html.theme--catppuccin-latte .search-result-link .property-search-result-badge,html.theme--catppuccin-latte .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:hover .search-filter,html.theme--catppuccin-latte .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:focus .search-filter{color:#ccd0da !important;background-color:#7287fd !important}html.theme--catppuccin-latte .search-result-title{color:#4c4f69}html.theme--catppuccin-latte .search-result-highlight{background-color:#d20f39;color:#e6e9ef}html.theme--catppuccin-latte .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-latte .w-100{width:100%}html.theme--catppuccin-latte .gap-2{gap:0.5rem}html.theme--catppuccin-latte .gap-4{gap:1rem} diff --git a/dev/assets/themes/catppuccin-macchiato.css b/dev/assets/themes/catppuccin-macchiato.css new file mode 100644 index 00000000..6ed16f8e --- /dev/null +++ b/dev/assets/themes/catppuccin-macchiato.css @@ -0,0 +1 @@ +html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato .file-name,html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-macchiato .pagination-previous:focus,html.theme--catppuccin-macchiato .pagination-next:focus,html.theme--catppuccin-macchiato .pagination-link:focus,html.theme--catppuccin-macchiato .pagination-ellipsis:focus,html.theme--catppuccin-macchiato .file-cta:focus,html.theme--catppuccin-macchiato .file-name:focus,html.theme--catppuccin-macchiato .select select:focus,html.theme--catppuccin-macchiato .textarea:focus,html.theme--catppuccin-macchiato .input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-macchiato .button:focus,html.theme--catppuccin-macchiato .is-focused.pagination-previous,html.theme--catppuccin-macchiato .is-focused.pagination-next,html.theme--catppuccin-macchiato .is-focused.pagination-link,html.theme--catppuccin-macchiato .is-focused.pagination-ellipsis,html.theme--catppuccin-macchiato .is-focused.file-cta,html.theme--catppuccin-macchiato .is-focused.file-name,html.theme--catppuccin-macchiato .select select.is-focused,html.theme--catppuccin-macchiato .is-focused.textarea,html.theme--catppuccin-macchiato .is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-focused.button,html.theme--catppuccin-macchiato .pagination-previous:active,html.theme--catppuccin-macchiato .pagination-next:active,html.theme--catppuccin-macchiato .pagination-link:active,html.theme--catppuccin-macchiato .pagination-ellipsis:active,html.theme--catppuccin-macchiato .file-cta:active,html.theme--catppuccin-macchiato .file-name:active,html.theme--catppuccin-macchiato .select select:active,html.theme--catppuccin-macchiato .textarea:active,html.theme--catppuccin-macchiato .input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-macchiato .button:active,html.theme--catppuccin-macchiato .is-active.pagination-previous,html.theme--catppuccin-macchiato .is-active.pagination-next,html.theme--catppuccin-macchiato .is-active.pagination-link,html.theme--catppuccin-macchiato .is-active.pagination-ellipsis,html.theme--catppuccin-macchiato .is-active.file-cta,html.theme--catppuccin-macchiato .is-active.file-name,html.theme--catppuccin-macchiato .select select.is-active,html.theme--catppuccin-macchiato .is-active.textarea,html.theme--catppuccin-macchiato .is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .is-active.button{outline:none}html.theme--catppuccin-macchiato .pagination-previous[disabled],html.theme--catppuccin-macchiato .pagination-next[disabled],html.theme--catppuccin-macchiato .pagination-link[disabled],html.theme--catppuccin-macchiato .pagination-ellipsis[disabled],html.theme--catppuccin-macchiato .file-cta[disabled],html.theme--catppuccin-macchiato .file-name[disabled],html.theme--catppuccin-macchiato .select select[disabled],html.theme--catppuccin-macchiato .textarea[disabled],html.theme--catppuccin-macchiato .input[disabled],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-macchiato .button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-macchiato .file-name,html.theme--catppuccin-macchiato fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-macchiato .select select,fieldset[disabled] html.theme--catppuccin-macchiato .textarea,fieldset[disabled] html.theme--catppuccin-macchiato .input,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato fieldset[disabled] .select select,html.theme--catppuccin-macchiato .select fieldset[disabled] select,html.theme--catppuccin-macchiato fieldset[disabled] .textarea,html.theme--catppuccin-macchiato fieldset[disabled] .input,html.theme--catppuccin-macchiato fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-macchiato .button,html.theme--catppuccin-macchiato fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-macchiato .tabs,html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .breadcrumb,html.theme--catppuccin-macchiato .file,html.theme--catppuccin-macchiato .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-macchiato .admonition:not(:last-child),html.theme--catppuccin-macchiato .tabs:not(:last-child),html.theme--catppuccin-macchiato .pagination:not(:last-child),html.theme--catppuccin-macchiato .message:not(:last-child),html.theme--catppuccin-macchiato .level:not(:last-child),html.theme--catppuccin-macchiato .breadcrumb:not(:last-child),html.theme--catppuccin-macchiato .block:not(:last-child),html.theme--catppuccin-macchiato .title:not(:last-child),html.theme--catppuccin-macchiato .subtitle:not(:last-child),html.theme--catppuccin-macchiato .table-container:not(:last-child),html.theme--catppuccin-macchiato .table:not(:last-child),html.theme--catppuccin-macchiato .progress:not(:last-child),html.theme--catppuccin-macchiato .notification:not(:last-child),html.theme--catppuccin-macchiato .content:not(:last-child),html.theme--catppuccin-macchiato .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .modal-close,html.theme--catppuccin-macchiato .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-macchiato .modal-close::before,html.theme--catppuccin-macchiato .delete::before,html.theme--catppuccin-macchiato .modal-close::after,html.theme--catppuccin-macchiato .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-macchiato .modal-close::before,html.theme--catppuccin-macchiato .delete::before{height:2px;width:50%}html.theme--catppuccin-macchiato .modal-close::after,html.theme--catppuccin-macchiato .delete::after{height:50%;width:2px}html.theme--catppuccin-macchiato .modal-close:hover,html.theme--catppuccin-macchiato .delete:hover,html.theme--catppuccin-macchiato .modal-close:focus,html.theme--catppuccin-macchiato .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-macchiato .modal-close:active,html.theme--catppuccin-macchiato .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-macchiato .is-small.modal-close,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-macchiato .is-small.delete,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-macchiato .is-medium.modal-close,html.theme--catppuccin-macchiato .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-macchiato .is-large.modal-close,html.theme--catppuccin-macchiato .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-macchiato .control.is-loading::after,html.theme--catppuccin-macchiato .select.is-loading::after,html.theme--catppuccin-macchiato .loader,html.theme--catppuccin-macchiato .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #8087a2;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-macchiato .hero-video,html.theme--catppuccin-macchiato .modal-background,html.theme--catppuccin-macchiato .modal,html.theme--catppuccin-macchiato .image.is-square img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-macchiato .image.is-square .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-macchiato .image.is-1by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-macchiato .image.is-1by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-macchiato .image.is-5by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-macchiato .image.is-4by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-macchiato .image.is-3by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-macchiato .image.is-5by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-16by9 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-macchiato .image.is-16by9 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-macchiato .image.is-2by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-macchiato .image.is-3by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-macchiato .image.is-4by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-macchiato .image.is-3by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-macchiato .image.is-2by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-macchiato .image.is-3by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-9by16 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-macchiato .image.is-9by16 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-macchiato .image.is-1by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-macchiato .image.is-1by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-macchiato .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363a4f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#212431 !important}.has-background-dark{background-color:#363a4f !important}.has-text-primary{color:#8aadf4 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#5b8cf0 !important}.has-background-primary{background-color:#8aadf4 !important}.has-text-primary-light{color:#ecf2fd !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bed1f9 !important}.has-background-primary-light{background-color:#ecf2fd !important}.has-text-primary-dark{color:#0e3b95 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#124dc4 !important}.has-background-primary-dark{background-color:#0e3b95 !important}.has-text-link{color:#8aadf4 !important}a.has-text-link:hover,a.has-text-link:focus{color:#5b8cf0 !important}.has-background-link{background-color:#8aadf4 !important}.has-text-link-light{color:#ecf2fd !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bed1f9 !important}.has-background-link-light{background-color:#ecf2fd !important}.has-text-link-dark{color:#0e3b95 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#124dc4 !important}.has-background-link-dark{background-color:#0e3b95 !important}.has-text-info{color:#8bd5ca !important}a.has-text-info:hover,a.has-text-info:focus{color:#66c7b9 !important}.has-background-info{background-color:#8bd5ca !important}.has-text-info-light{color:#f0faf8 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#cbece7 !important}.has-background-info-light{background-color:#f0faf8 !important}.has-text-info-dark{color:#276d62 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#359284 !important}.has-background-info-dark{background-color:#276d62 !important}.has-text-success{color:#a6da95 !important}a.has-text-success:hover,a.has-text-success:focus{color:#86cd6f !important}.has-background-success{background-color:#a6da95 !important}.has-text-success-light{color:#f2faf0 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#d3edca !important}.has-background-success-light{background-color:#f2faf0 !important}.has-text-success-dark{color:#386e26 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#4b9333 !important}.has-background-success-dark{background-color:#386e26 !important}.has-text-warning{color:#eed49f !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#e6c174 !important}.has-background-warning{background-color:#eed49f !important}.has-text-warning-light{color:#fcf7ee !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f4e4c2 !important}.has-background-warning-light{background-color:#fcf7ee !important}.has-text-warning-dark{color:#7e5c16 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#a97b1e !important}.has-background-warning-dark{background-color:#7e5c16 !important}.has-text-danger{color:#ed8796 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#e65b6f !important}.has-background-danger{background-color:#ed8796 !important}.has-text-danger-light{color:#fcedef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f6c1c9 !important}.has-background-danger-light{background-color:#fcedef !important}.has-text-danger-dark{color:#971729 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c31d36 !important}.has-background-danger-dark{background-color:#971729 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363a4f !important}.has-background-grey-darker{background-color:#363a4f !important}.has-text-grey-dark{color:#494d64 !important}.has-background-grey-dark{background-color:#494d64 !important}.has-text-grey{color:#5b6078 !important}.has-background-grey{background-color:#5b6078 !important}.has-text-grey-light{color:#6e738d !important}.has-background-grey-light{background-color:#6e738d !important}.has-text-grey-lighter{color:#8087a2 !important}.has-background-grey-lighter{background-color:#8087a2 !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--catppuccin-macchiato html{background-color:#24273a;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-macchiato article,html.theme--catppuccin-macchiato aside,html.theme--catppuccin-macchiato figure,html.theme--catppuccin-macchiato footer,html.theme--catppuccin-macchiato header,html.theme--catppuccin-macchiato hgroup,html.theme--catppuccin-macchiato section{display:block}html.theme--catppuccin-macchiato body,html.theme--catppuccin-macchiato button,html.theme--catppuccin-macchiato input,html.theme--catppuccin-macchiato optgroup,html.theme--catppuccin-macchiato select,html.theme--catppuccin-macchiato textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-macchiato code,html.theme--catppuccin-macchiato pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-macchiato body{color:#cad3f5;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-macchiato a{color:#8aadf4;cursor:pointer;text-decoration:none}html.theme--catppuccin-macchiato a strong{color:currentColor}html.theme--catppuccin-macchiato a:hover{color:#91d7e3}html.theme--catppuccin-macchiato code{background-color:#1e2030;color:#cad3f5;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-macchiato hr{background-color:#1e2030;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-macchiato img{height:auto;max-width:100%}html.theme--catppuccin-macchiato input[type="checkbox"],html.theme--catppuccin-macchiato input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-macchiato small{font-size:.875em}html.theme--catppuccin-macchiato span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-macchiato strong{color:#b5c1f1;font-weight:700}html.theme--catppuccin-macchiato fieldset{border:none}html.theme--catppuccin-macchiato pre{-webkit-overflow-scrolling:touch;background-color:#1e2030;color:#cad3f5;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-macchiato pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-macchiato table td,html.theme--catppuccin-macchiato table th{vertical-align:top}html.theme--catppuccin-macchiato table td:not([align]),html.theme--catppuccin-macchiato table th:not([align]){text-align:inherit}html.theme--catppuccin-macchiato table th{color:#b5c1f1}html.theme--catppuccin-macchiato .box{background-color:#494d64;border-radius:8px;box-shadow:none;color:#cad3f5;display:block;padding:1.25rem}html.theme--catppuccin-macchiato a.box:hover,html.theme--catppuccin-macchiato a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #8aadf4}html.theme--catppuccin-macchiato a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #8aadf4}html.theme--catppuccin-macchiato .button{background-color:#1e2030;border-color:#3b3f5f;border-width:1px;color:#8aadf4;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-macchiato .button strong{color:inherit}html.theme--catppuccin-macchiato .button .icon,html.theme--catppuccin-macchiato .button .icon.is-small,html.theme--catppuccin-macchiato .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-macchiato .button .icon.is-medium,html.theme--catppuccin-macchiato .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-macchiato .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-macchiato .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-macchiato .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-macchiato .button:hover,html.theme--catppuccin-macchiato .button.is-hovered{border-color:#6e738d;color:#b5c1f1}html.theme--catppuccin-macchiato .button:focus,html.theme--catppuccin-macchiato .button.is-focused{border-color:#6e738d;color:#739df2}html.theme--catppuccin-macchiato .button:focus:not(:active),html.theme--catppuccin-macchiato .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button:active,html.theme--catppuccin-macchiato .button.is-active{border-color:#494d64;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text{background-color:transparent;border-color:transparent;color:#cad3f5;text-decoration:underline}html.theme--catppuccin-macchiato .button.is-text:hover,html.theme--catppuccin-macchiato .button.is-text.is-hovered,html.theme--catppuccin-macchiato .button.is-text:focus,html.theme--catppuccin-macchiato .button.is-text.is-focused{background-color:#1e2030;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text:active,html.theme--catppuccin-macchiato .button.is-text.is-active{background-color:#141620;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-macchiato .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#8aadf4;text-decoration:none}html.theme--catppuccin-macchiato .button.is-ghost:hover,html.theme--catppuccin-macchiato .button.is-ghost.is-hovered{color:#8aadf4;text-decoration:underline}html.theme--catppuccin-macchiato .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:hover,html.theme--catppuccin-macchiato .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:focus,html.theme--catppuccin-macchiato .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:focus:not(:active),html.theme--catppuccin-macchiato .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .button.is-white:active,html.theme--catppuccin-macchiato .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-macchiato .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-macchiato .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-white.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:hover,html.theme--catppuccin-macchiato .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:focus,html.theme--catppuccin-macchiato .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:focus:not(:active),html.theme--catppuccin-macchiato .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .button.is-black:active,html.theme--catppuccin-macchiato .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-macchiato .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-black.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:hover,html.theme--catppuccin-macchiato .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:focus,html.theme--catppuccin-macchiato .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:focus:not(:active),html.theme--catppuccin-macchiato .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .button.is-light:active,html.theme--catppuccin-macchiato .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-macchiato .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-light.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-dark,html.theme--catppuccin-macchiato .content kbd.button{background-color:#363a4f;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:hover,html.theme--catppuccin-macchiato .content kbd.button:hover,html.theme--catppuccin-macchiato .button.is-dark.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-hovered{background-color:#313447;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:focus,html.theme--catppuccin-macchiato .content kbd.button:focus,html.theme--catppuccin-macchiato .button.is-dark.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:focus:not(:active),html.theme--catppuccin-macchiato .content kbd.button:focus:not(:active),html.theme--catppuccin-macchiato .button.is-dark.is-focused:not(:active),html.theme--catppuccin-macchiato .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .button.is-dark:active,html.theme--catppuccin-macchiato .content kbd.button:active,html.theme--catppuccin-macchiato .button.is-dark.is-active,html.theme--catppuccin-macchiato .content kbd.button.is-active{background-color:#2c2f40;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark[disabled],html.theme--catppuccin-macchiato .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button{background-color:#363a4f;border-color:#363a4f;box-shadow:none}html.theme--catppuccin-macchiato .button.is-dark.is-inverted,html.theme--catppuccin-macchiato .content kbd.button.is-inverted{background-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted:hover,html.theme--catppuccin-macchiato .content kbd.button.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-dark.is-inverted[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-loading::after,html.theme--catppuccin-macchiato .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined,html.theme--catppuccin-macchiato .content kbd.button.is-outlined{background-color:transparent;border-color:#363a4f;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-outlined:hover,html.theme--catppuccin-macchiato .content kbd.button.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-dark.is-outlined:focus,html.theme--catppuccin-macchiato .content kbd.button.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-focused{background-color:#363a4f;border-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363a4f #363a4f !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-outlined{background-color:transparent;border-color:#363a4f;box-shadow:none;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363a4f #363a4f !important}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:focus:not(:active),html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-macchiato .button.is-primary.is-focused:not(:active),html.theme--catppuccin-macchiato .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button.is-primary:active,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-macchiato .button.is-primary.is-active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-active.docs-sourcelink{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink{background-color:#8aadf4;border-color:#8aadf4;box-shadow:none}html.theme--catppuccin-macchiato .button.is-primary.is-inverted,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-primary.is-inverted[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-loading::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-outlined:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-macchiato .button.is-primary.is-outlined:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8aadf4;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-light,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-primary.is-light:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-light.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e1eafc;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-primary.is-light:active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-macchiato .button.is-primary.is-light.is-active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d5e2fb;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:hover,html.theme--catppuccin-macchiato .button.is-link.is-hovered{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:focus,html.theme--catppuccin-macchiato .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:focus:not(:active),html.theme--catppuccin-macchiato .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button.is-link:active,html.theme--catppuccin-macchiato .button.is-link.is-active{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link{background-color:#8aadf4;border-color:#8aadf4;box-shadow:none}html.theme--catppuccin-macchiato .button.is-link.is-inverted{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined{background-color:transparent;border-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-link.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-focused{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-outlined{background-color:transparent;border-color:#8aadf4;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-light{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link.is-light:hover,html.theme--catppuccin-macchiato .button.is-link.is-light.is-hovered{background-color:#e1eafc;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link.is-light:active,html.theme--catppuccin-macchiato .button.is-link.is-light.is-active{background-color:#d5e2fb;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-info{background-color:#8bd5ca;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:hover,html.theme--catppuccin-macchiato .button.is-info.is-hovered{background-color:#82d2c6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:focus,html.theme--catppuccin-macchiato .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:focus:not(:active),html.theme--catppuccin-macchiato .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .button.is-info:active,html.theme--catppuccin-macchiato .button.is-info.is-active{background-color:#78cec1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info{background-color:#8bd5ca;border-color:#8bd5ca;box-shadow:none}html.theme--catppuccin-macchiato .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined{background-color:transparent;border-color:#8bd5ca;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-info.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-focused{background-color:#8bd5ca;border-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #8bd5ca #8bd5ca !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-outlined{background-color:transparent;border-color:#8bd5ca;box-shadow:none;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8bd5ca #8bd5ca !important}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-light{background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .button.is-info.is-light:hover,html.theme--catppuccin-macchiato .button.is-info.is-light.is-hovered{background-color:#e7f6f4;border-color:transparent;color:#276d62}html.theme--catppuccin-macchiato .button.is-info.is-light:active,html.theme--catppuccin-macchiato .button.is-info.is-light.is-active{background-color:#ddf3f0;border-color:transparent;color:#276d62}html.theme--catppuccin-macchiato .button.is-success{background-color:#a6da95;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:hover,html.theme--catppuccin-macchiato .button.is-success.is-hovered{background-color:#9ed78c;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:focus,html.theme--catppuccin-macchiato .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:focus:not(:active),html.theme--catppuccin-macchiato .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .button.is-success:active,html.theme--catppuccin-macchiato .button.is-success.is-active{background-color:#96d382;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success{background-color:#a6da95;border-color:#a6da95;box-shadow:none}html.theme--catppuccin-macchiato .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined{background-color:transparent;border-color:#a6da95;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-success.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-focused{background-color:#a6da95;border-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6da95 #a6da95 !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-outlined{background-color:transparent;border-color:#a6da95;box-shadow:none;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6da95 #a6da95 !important}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-light{background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .button.is-success.is-light:hover,html.theme--catppuccin-macchiato .button.is-success.is-light.is-hovered{background-color:#eaf6e6;border-color:transparent;color:#386e26}html.theme--catppuccin-macchiato .button.is-success.is-light:active,html.theme--catppuccin-macchiato .button.is-success.is-light.is-active{background-color:#e2f3dd;border-color:transparent;color:#386e26}html.theme--catppuccin-macchiato .button.is-warning{background-color:#eed49f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:hover,html.theme--catppuccin-macchiato .button.is-warning.is-hovered{background-color:#eccf94;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:focus,html.theme--catppuccin-macchiato .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:focus:not(:active),html.theme--catppuccin-macchiato .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .button.is-warning:active,html.theme--catppuccin-macchiato .button.is-warning.is-active{background-color:#eaca89;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning{background-color:#eed49f;border-color:#eed49f;box-shadow:none}html.theme--catppuccin-macchiato .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined{background-color:transparent;border-color:#eed49f;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-warning.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-focused{background-color:#eed49f;border-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #eed49f #eed49f !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-outlined{background-color:transparent;border-color:#eed49f;box-shadow:none;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #eed49f #eed49f !important}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-light{background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-warning.is-light:hover,html.theme--catppuccin-macchiato .button.is-warning.is-light.is-hovered{background-color:#faf2e3;border-color:transparent;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-warning.is-light:active,html.theme--catppuccin-macchiato .button.is-warning.is-light.is-active{background-color:#f8eed8;border-color:transparent;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-danger{background-color:#ed8796;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:hover,html.theme--catppuccin-macchiato .button.is-danger.is-hovered{background-color:#eb7c8c;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:focus,html.theme--catppuccin-macchiato .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:focus:not(:active),html.theme--catppuccin-macchiato .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .button.is-danger:active,html.theme--catppuccin-macchiato .button.is-danger.is-active{background-color:#ea7183;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger{background-color:#ed8796;border-color:#ed8796;box-shadow:none}html.theme--catppuccin-macchiato .button.is-danger.is-inverted{background-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined{background-color:transparent;border-color:#ed8796;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-danger.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-focused{background-color:#ed8796;border-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #ed8796 #ed8796 !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-outlined{background-color:transparent;border-color:#ed8796;box-shadow:none;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ed8796 #ed8796 !important}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-light{background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .button.is-danger.is-light:hover,html.theme--catppuccin-macchiato .button.is-danger.is-light.is-hovered{background-color:#fbe2e6;border-color:transparent;color:#971729}html.theme--catppuccin-macchiato .button.is-danger.is-light:active,html.theme--catppuccin-macchiato .button.is-danger.is-light.is-active{background-color:#f9d7dc;border-color:transparent;color:#971729}html.theme--catppuccin-macchiato .button.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-small:not(.is-rounded),html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-macchiato .button.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .button.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .button.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button{background-color:#6e738d;border-color:#5b6078;box-shadow:none;opacity:.5}html.theme--catppuccin-macchiato .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-macchiato .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-macchiato .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-macchiato .button.is-static{background-color:#1e2030;border-color:#5b6078;color:#8087a2;box-shadow:none;pointer-events:none}html.theme--catppuccin-macchiato .button.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-macchiato .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-macchiato .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-macchiato .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-macchiato .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-macchiato .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-macchiato .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-macchiato .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-macchiato .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-macchiato .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-macchiato .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-macchiato .buttons.has-addons .button:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-macchiato .buttons.has-addons .button:focus,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-focused,html.theme--catppuccin-macchiato .buttons.has-addons .button:active,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-active,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-macchiato .buttons.has-addons .button:focus:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button:active:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-macchiato .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .buttons.is-centered{justify-content:center}html.theme--catppuccin-macchiato .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-macchiato .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .button.is-responsive.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-macchiato .button.is-responsive,html.theme--catppuccin-macchiato .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-macchiato .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .button.is-responsive.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-macchiato .button.is-responsive,html.theme--catppuccin-macchiato .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-macchiato .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-macchiato .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-macchiato .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-macchiato .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-macchiato .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-macchiato .content li+li{margin-top:0.25em}html.theme--catppuccin-macchiato .content p:not(:last-child),html.theme--catppuccin-macchiato .content dl:not(:last-child),html.theme--catppuccin-macchiato .content ol:not(:last-child),html.theme--catppuccin-macchiato .content ul:not(:last-child),html.theme--catppuccin-macchiato .content blockquote:not(:last-child),html.theme--catppuccin-macchiato .content pre:not(:last-child),html.theme--catppuccin-macchiato .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-macchiato .content h1,html.theme--catppuccin-macchiato .content h2,html.theme--catppuccin-macchiato .content h3,html.theme--catppuccin-macchiato .content h4,html.theme--catppuccin-macchiato .content h5,html.theme--catppuccin-macchiato .content h6{color:#cad3f5;font-weight:600;line-height:1.125}html.theme--catppuccin-macchiato .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-macchiato .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-macchiato .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-macchiato .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-macchiato .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-macchiato .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-macchiato .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-macchiato .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-macchiato .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-macchiato .content blockquote{background-color:#1e2030;border-left:5px solid #5b6078;padding:1.25em 1.5em}html.theme--catppuccin-macchiato .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-macchiato .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-macchiato .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-macchiato .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-macchiato .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-macchiato .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-macchiato .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-macchiato .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-macchiato .content ul ul ul{list-style-type:square}html.theme--catppuccin-macchiato .content dd{margin-left:2em}html.theme--catppuccin-macchiato .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-macchiato .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-macchiato .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-macchiato .content figure img{display:inline-block}html.theme--catppuccin-macchiato .content figure figcaption{font-style:italic}html.theme--catppuccin-macchiato .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-macchiato .content sup,html.theme--catppuccin-macchiato .content sub{font-size:75%}html.theme--catppuccin-macchiato .content table{width:100%}html.theme--catppuccin-macchiato .content table td,html.theme--catppuccin-macchiato .content table th{border:1px solid #5b6078;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-macchiato .content table th{color:#b5c1f1}html.theme--catppuccin-macchiato .content table th:not([align]){text-align:inherit}html.theme--catppuccin-macchiato .content table thead td,html.theme--catppuccin-macchiato .content table thead th{border-width:0 0 2px;color:#b5c1f1}html.theme--catppuccin-macchiato .content table tfoot td,html.theme--catppuccin-macchiato .content table tfoot th{border-width:2px 0 0;color:#b5c1f1}html.theme--catppuccin-macchiato .content table tbody tr:last-child td,html.theme--catppuccin-macchiato .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-macchiato .content .tabs li+li{margin-top:0}html.theme--catppuccin-macchiato .content.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-macchiato .content.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .content.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .content.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-macchiato .icon.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-macchiato .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-macchiato .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-macchiato .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-macchiato .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-macchiato .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-macchiato div.icon-text{display:flex}html.theme--catppuccin-macchiato .image,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-macchiato .image img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-macchiato .image img.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-macchiato .image.is-fullwidth,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .image.is-square img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-macchiato .image.is-square .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-macchiato .image.is-1by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-macchiato .image.is-1by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-macchiato .image.is-5by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-macchiato .image.is-4by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-macchiato .image.is-3by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-macchiato .image.is-5by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-16by9 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-macchiato .image.is-16by9 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-macchiato .image.is-2by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-macchiato .image.is-3by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-macchiato .image.is-4by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-macchiato .image.is-3by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-macchiato .image.is-2by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-macchiato .image.is-3by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-9by16 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-macchiato .image.is-9by16 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-macchiato .image.is-1by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-macchiato .image.is-1by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-macchiato .image.is-square,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-macchiato .image.is-1by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-macchiato .image.is-5by4,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-macchiato .image.is-4by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-macchiato .image.is-3by2,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-macchiato .image.is-5by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-macchiato .image.is-16by9,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-macchiato .image.is-2by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-macchiato .image.is-3by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-macchiato .image.is-4by5,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-macchiato .image.is-3by4,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-macchiato .image.is-2by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-macchiato .image.is-3by5,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-macchiato .image.is-9by16,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-macchiato .image.is-1by2,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-macchiato .image.is-1by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-macchiato .image.is-16x16,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-macchiato .image.is-24x24,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-macchiato .image.is-32x32,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-macchiato .image.is-48x48,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-macchiato .image.is-64x64,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-macchiato .image.is-96x96,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-macchiato .image.is-128x128,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-macchiato .notification{background-color:#1e2030;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-macchiato .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-macchiato .notification strong{color:currentColor}html.theme--catppuccin-macchiato .notification code,html.theme--catppuccin-macchiato .notification pre{background:#fff}html.theme--catppuccin-macchiato .notification pre code{background:transparent}html.theme--catppuccin-macchiato .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-macchiato .notification .title,html.theme--catppuccin-macchiato .notification .subtitle,html.theme--catppuccin-macchiato .notification .content{color:currentColor}html.theme--catppuccin-macchiato .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-dark,html.theme--catppuccin-macchiato .content kbd.notification{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .notification.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.notification.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .notification.is-primary.is-light,html.theme--catppuccin-macchiato .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .notification.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .notification.is-link.is-light{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .notification.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-info.is-light{background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .notification.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-success.is-light{background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .notification.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-warning.is-light{background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .notification.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .notification.is-danger.is-light{background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-macchiato .progress::-webkit-progress-bar{background-color:#494d64}html.theme--catppuccin-macchiato .progress::-webkit-progress-value{background-color:#8087a2}html.theme--catppuccin-macchiato .progress::-moz-progress-bar{background-color:#8087a2}html.theme--catppuccin-macchiato .progress::-ms-fill{background-color:#8087a2;border:none}html.theme--catppuccin-macchiato .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-macchiato .content kbd.progress::-webkit-progress-value{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-macchiato .content kbd.progress::-moz-progress-bar{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark::-ms-fill,html.theme--catppuccin-macchiato .content kbd.progress::-ms-fill{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark:indeterminate,html.theme--catppuccin-macchiato .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363a4f 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary::-ms-fill,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary:indeterminate,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #8aadf4 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-link::-webkit-progress-value{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link::-moz-progress-bar{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link::-ms-fill{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link:indeterminate{background-image:linear-gradient(to right, #8aadf4 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-info::-webkit-progress-value{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info::-moz-progress-bar{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info::-ms-fill{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info:indeterminate{background-image:linear-gradient(to right, #8bd5ca 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-success::-webkit-progress-value{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success::-moz-progress-bar{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success::-ms-fill{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6da95 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-warning::-webkit-progress-value{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning::-moz-progress-bar{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning::-ms-fill{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #eed49f 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-danger::-webkit-progress-value{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger::-moz-progress-bar{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger::-ms-fill{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #ed8796 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#494d64;background-image:linear-gradient(to right, #cad3f5 30%, #494d64 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-macchiato .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-macchiato .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-macchiato .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-macchiato .progress.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-macchiato .progress.is-medium{height:1.25rem}html.theme--catppuccin-macchiato .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-macchiato .table{background-color:#494d64;color:#cad3f5}html.theme--catppuccin-macchiato .table td,html.theme--catppuccin-macchiato .table th{border:1px solid #5b6078;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-macchiato .table td.is-white,html.theme--catppuccin-macchiato .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .table td.is-black,html.theme--catppuccin-macchiato .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .table td.is-light,html.theme--catppuccin-macchiato .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-dark,html.theme--catppuccin-macchiato .table th.is-dark{background-color:#363a4f;border-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .table td.is-primary,html.theme--catppuccin-macchiato .table th.is-primary{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-link,html.theme--catppuccin-macchiato .table th.is-link{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-info,html.theme--catppuccin-macchiato .table th.is-info{background-color:#8bd5ca;border-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-success,html.theme--catppuccin-macchiato .table th.is-success{background-color:#a6da95;border-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-warning,html.theme--catppuccin-macchiato .table th.is-warning{background-color:#eed49f;border-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-danger,html.theme--catppuccin-macchiato .table th.is-danger{background-color:#ed8796;border-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .table td.is-narrow,html.theme--catppuccin-macchiato .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-macchiato .table td.is-selected,html.theme--catppuccin-macchiato .table th.is-selected{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-selected a,html.theme--catppuccin-macchiato .table td.is-selected strong,html.theme--catppuccin-macchiato .table th.is-selected a,html.theme--catppuccin-macchiato .table th.is-selected strong{color:currentColor}html.theme--catppuccin-macchiato .table td.is-vcentered,html.theme--catppuccin-macchiato .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-macchiato .table th{color:#b5c1f1}html.theme--catppuccin-macchiato .table th:not([align]){text-align:left}html.theme--catppuccin-macchiato .table tr.is-selected{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table tr.is-selected a,html.theme--catppuccin-macchiato .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-macchiato .table tr.is-selected td,html.theme--catppuccin-macchiato .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-macchiato .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table thead td,html.theme--catppuccin-macchiato .table thead th{border-width:0 0 2px;color:#b5c1f1}html.theme--catppuccin-macchiato .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table tfoot td,html.theme--catppuccin-macchiato .table tfoot th{border-width:2px 0 0;color:#b5c1f1}html.theme--catppuccin-macchiato .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table tbody tr:last-child td,html.theme--catppuccin-macchiato .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-macchiato .table.is-bordered td,html.theme--catppuccin-macchiato .table.is-bordered th{border-width:1px}html.theme--catppuccin-macchiato .table.is-bordered tr:last-child td,html.theme--catppuccin-macchiato .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-macchiato .table.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#363a4f}html.theme--catppuccin-macchiato .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#363a4f}html.theme--catppuccin-macchiato .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#3a3e55}html.theme--catppuccin-macchiato .table.is-narrow td,html.theme--catppuccin-macchiato .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-macchiato .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#363a4f}html.theme--catppuccin-macchiato .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-macchiato .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .tags .tag,html.theme--catppuccin-macchiato .tags .content kbd,html.theme--catppuccin-macchiato .content .tags kbd,html.theme--catppuccin-macchiato .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-macchiato .tags .tag:not(:last-child),html.theme--catppuccin-macchiato .tags .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags kbd:not(:last-child),html.theme--catppuccin-macchiato .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-macchiato .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-macchiato .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-macchiato .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-macchiato .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-macchiato .tags.is-centered{justify-content:center}html.theme--catppuccin-macchiato .tags.is-centered .tag,html.theme--catppuccin-macchiato .tags.is-centered .content kbd,html.theme--catppuccin-macchiato .content .tags.is-centered kbd,html.theme--catppuccin-macchiato .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-macchiato .tags.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .tags.is-right .tag:not(:first-child),html.theme--catppuccin-macchiato .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-macchiato .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-macchiato .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-macchiato .tags.is-right .tag:not(:last-child),html.theme--catppuccin-macchiato .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-macchiato .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-macchiato .tags.has-addons .tag,html.theme--catppuccin-macchiato .tags.has-addons .content kbd,html.theme--catppuccin-macchiato .content .tags.has-addons kbd,html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-macchiato .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-macchiato .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-macchiato .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-macchiato .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-macchiato .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-macchiato .tag:not(body),html.theme--catppuccin-macchiato .content kbd:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#1e2030;border-radius:.4em;color:#cad3f5;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-macchiato .tag:not(body) .delete,html.theme--catppuccin-macchiato .content kbd:not(body) .delete,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-macchiato .tag.is-white:not(body),html.theme--catppuccin-macchiato .content kbd.is-white:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .tag.is-black:not(body),html.theme--catppuccin-macchiato .content kbd.is-black:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .tag.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-dark:not(body),html.theme--catppuccin-macchiato .content kbd:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-macchiato .content .docstring>section>kbd:not(body){background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .tag.is-primary:not(body),html.theme--catppuccin-macchiato .content kbd.is-primary:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .tag.is-primary.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .tag.is-link:not(body),html.theme--catppuccin-macchiato .content kbd.is-link:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .tag.is-link.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-link.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .tag.is-info:not(body),html.theme--catppuccin-macchiato .content kbd.is-info:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-info.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-info.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .tag.is-success:not(body),html.theme--catppuccin-macchiato .content kbd.is-success:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-success.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-success.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .tag.is-warning:not(body),html.theme--catppuccin-macchiato .content kbd.is-warning:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-warning.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .tag.is-danger:not(body),html.theme--catppuccin-macchiato .content kbd.is-danger:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .tag.is-danger.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .tag.is-normal:not(body),html.theme--catppuccin-macchiato .content kbd.is-normal:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-macchiato .tag.is-medium:not(body),html.theme--catppuccin-macchiato .content kbd.is-medium:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-macchiato .tag.is-large:not(body),html.theme--catppuccin-macchiato .content kbd.is-large:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-macchiato .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-macchiato .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-macchiato .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-macchiato .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-macchiato .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-macchiato .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-macchiato .tag.is-delete:not(body),html.theme--catppuccin-macchiato .content kbd.is-delete:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::before,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::before,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-macchiato .tag.is-delete:not(body)::after,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::after,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::before,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::before,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::after,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::after,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-macchiato .tag.is-delete:not(body):hover,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):hover,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-macchiato .tag.is-delete:not(body):focus,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):focus,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#141620}html.theme--catppuccin-macchiato .tag.is-delete:not(body):active,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):active,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#0a0b11}html.theme--catppuccin-macchiato .tag.is-rounded:not(body),html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-macchiato .content kbd.is-rounded:not(body),html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-macchiato a.tag:hover,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-macchiato .title,html.theme--catppuccin-macchiato .subtitle{word-break:break-word}html.theme--catppuccin-macchiato .title em,html.theme--catppuccin-macchiato .title span,html.theme--catppuccin-macchiato .subtitle em,html.theme--catppuccin-macchiato .subtitle span{font-weight:inherit}html.theme--catppuccin-macchiato .title sub,html.theme--catppuccin-macchiato .subtitle sub{font-size:.75em}html.theme--catppuccin-macchiato .title sup,html.theme--catppuccin-macchiato .subtitle sup{font-size:.75em}html.theme--catppuccin-macchiato .title .tag,html.theme--catppuccin-macchiato .title .content kbd,html.theme--catppuccin-macchiato .content .title kbd,html.theme--catppuccin-macchiato .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-macchiato .subtitle .tag,html.theme--catppuccin-macchiato .subtitle .content kbd,html.theme--catppuccin-macchiato .content .subtitle kbd,html.theme--catppuccin-macchiato .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-macchiato .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-macchiato .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-macchiato .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-macchiato .title.is-1{font-size:3rem}html.theme--catppuccin-macchiato .title.is-2{font-size:2.5rem}html.theme--catppuccin-macchiato .title.is-3{font-size:2rem}html.theme--catppuccin-macchiato .title.is-4{font-size:1.5rem}html.theme--catppuccin-macchiato .title.is-5{font-size:1.25rem}html.theme--catppuccin-macchiato .title.is-6{font-size:1rem}html.theme--catppuccin-macchiato .title.is-7{font-size:.75rem}html.theme--catppuccin-macchiato .subtitle{color:#6e738d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-macchiato .subtitle strong{color:#6e738d;font-weight:600}html.theme--catppuccin-macchiato .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-macchiato .subtitle.is-1{font-size:3rem}html.theme--catppuccin-macchiato .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-macchiato .subtitle.is-3{font-size:2rem}html.theme--catppuccin-macchiato .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-macchiato .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-macchiato .subtitle.is-6{font-size:1rem}html.theme--catppuccin-macchiato .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-macchiato .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-macchiato .number{align-items:center;background-color:#1e2030;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{background-color:#24273a;border-color:#5b6078;border-radius:.4em;color:#8087a2}html.theme--catppuccin-macchiato .select select::-moz-placeholder,html.theme--catppuccin-macchiato .textarea::-moz-placeholder,html.theme--catppuccin-macchiato .input::-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select::-webkit-input-placeholder,html.theme--catppuccin-macchiato .textarea::-webkit-input-placeholder,html.theme--catppuccin-macchiato .input::-webkit-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:-moz-placeholder,html.theme--catppuccin-macchiato .textarea:-moz-placeholder,html.theme--catppuccin-macchiato .input:-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:-ms-input-placeholder,html.theme--catppuccin-macchiato .textarea:-ms-input-placeholder,html.theme--catppuccin-macchiato .input:-ms-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:hover,html.theme--catppuccin-macchiato .textarea:hover,html.theme--catppuccin-macchiato .input:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-macchiato .select select.is-hovered,html.theme--catppuccin-macchiato .is-hovered.textarea,html.theme--catppuccin-macchiato .is-hovered.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#6e738d}html.theme--catppuccin-macchiato .select select:focus,html.theme--catppuccin-macchiato .textarea:focus,html.theme--catppuccin-macchiato .input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-macchiato .select select.is-focused,html.theme--catppuccin-macchiato .is-focused.textarea,html.theme--catppuccin-macchiato .is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .select select:active,html.theme--catppuccin-macchiato .textarea:active,html.theme--catppuccin-macchiato .input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-macchiato .select select.is-active,html.theme--catppuccin-macchiato .is-active.textarea,html.theme--catppuccin-macchiato .is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#8aadf4;box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select select[disabled],html.theme--catppuccin-macchiato .textarea[disabled],html.theme--catppuccin-macchiato .input[disabled],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .select select,fieldset[disabled] html.theme--catppuccin-macchiato .textarea,fieldset[disabled] html.theme--catppuccin-macchiato .input,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{background-color:#6e738d;border-color:#1e2030;box-shadow:none;color:#f5f7fd}html.theme--catppuccin-macchiato .select select[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato .input[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato .input[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-macchiato .textarea[readonly],html.theme--catppuccin-macchiato .input[readonly],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-macchiato .is-white.textarea,html.theme--catppuccin-macchiato .is-white.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-macchiato .is-white.textarea:focus,html.theme--catppuccin-macchiato .is-white.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-macchiato .is-white.is-focused.textarea,html.theme--catppuccin-macchiato .is-white.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-white.textarea:active,html.theme--catppuccin-macchiato .is-white.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-macchiato .is-white.is-active.textarea,html.theme--catppuccin-macchiato .is-white.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .is-black.textarea,html.theme--catppuccin-macchiato .is-black.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-macchiato .is-black.textarea:focus,html.theme--catppuccin-macchiato .is-black.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-macchiato .is-black.is-focused.textarea,html.theme--catppuccin-macchiato .is-black.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-black.textarea:active,html.theme--catppuccin-macchiato .is-black.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-macchiato .is-black.is-active.textarea,html.theme--catppuccin-macchiato .is-black.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .is-light.textarea,html.theme--catppuccin-macchiato .is-light.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-macchiato .is-light.textarea:focus,html.theme--catppuccin-macchiato .is-light.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-macchiato .is-light.is-focused.textarea,html.theme--catppuccin-macchiato .is-light.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-light.textarea:active,html.theme--catppuccin-macchiato .is-light.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-macchiato .is-light.is-active.textarea,html.theme--catppuccin-macchiato .is-light.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .is-dark.textarea,html.theme--catppuccin-macchiato .content kbd.textarea,html.theme--catppuccin-macchiato .is-dark.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-macchiato .content kbd.input{border-color:#363a4f}html.theme--catppuccin-macchiato .is-dark.textarea:focus,html.theme--catppuccin-macchiato .content kbd.textarea:focus,html.theme--catppuccin-macchiato .is-dark.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-macchiato .content kbd.input:focus,html.theme--catppuccin-macchiato .is-dark.is-focused.textarea,html.theme--catppuccin-macchiato .content kbd.is-focused.textarea,html.theme--catppuccin-macchiato .is-dark.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .content kbd.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-dark.textarea:active,html.theme--catppuccin-macchiato .content kbd.textarea:active,html.theme--catppuccin-macchiato .is-dark.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-macchiato .content kbd.input:active,html.theme--catppuccin-macchiato .is-dark.is-active.textarea,html.theme--catppuccin-macchiato .content kbd.is-active.textarea,html.theme--catppuccin-macchiato .is-dark.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .content kbd.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .is-primary.textarea,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink{border-color:#8aadf4}html.theme--catppuccin-macchiato .is-primary.textarea:focus,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-macchiato .is-primary.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-macchiato .is-primary.is-focused.textarea,html.theme--catppuccin-macchiato .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.textarea:active,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-macchiato .is-primary.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-macchiato .is-primary.is-active.textarea,html.theme--catppuccin-macchiato .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .is-link.textarea,html.theme--catppuccin-macchiato .is-link.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#8aadf4}html.theme--catppuccin-macchiato .is-link.textarea:focus,html.theme--catppuccin-macchiato .is-link.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-macchiato .is-link.is-focused.textarea,html.theme--catppuccin-macchiato .is-link.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-link.textarea:active,html.theme--catppuccin-macchiato .is-link.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-macchiato .is-link.is-active.textarea,html.theme--catppuccin-macchiato .is-link.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .is-info.textarea,html.theme--catppuccin-macchiato .is-info.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#8bd5ca}html.theme--catppuccin-macchiato .is-info.textarea:focus,html.theme--catppuccin-macchiato .is-info.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-macchiato .is-info.is-focused.textarea,html.theme--catppuccin-macchiato .is-info.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-info.textarea:active,html.theme--catppuccin-macchiato .is-info.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-macchiato .is-info.is-active.textarea,html.theme--catppuccin-macchiato .is-info.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .is-success.textarea,html.theme--catppuccin-macchiato .is-success.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6da95}html.theme--catppuccin-macchiato .is-success.textarea:focus,html.theme--catppuccin-macchiato .is-success.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-macchiato .is-success.is-focused.textarea,html.theme--catppuccin-macchiato .is-success.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-success.textarea:active,html.theme--catppuccin-macchiato .is-success.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-macchiato .is-success.is-active.textarea,html.theme--catppuccin-macchiato .is-success.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .is-warning.textarea,html.theme--catppuccin-macchiato .is-warning.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#eed49f}html.theme--catppuccin-macchiato .is-warning.textarea:focus,html.theme--catppuccin-macchiato .is-warning.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-macchiato .is-warning.is-focused.textarea,html.theme--catppuccin-macchiato .is-warning.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-warning.textarea:active,html.theme--catppuccin-macchiato .is-warning.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-macchiato .is-warning.is-active.textarea,html.theme--catppuccin-macchiato .is-warning.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .is-danger.textarea,html.theme--catppuccin-macchiato .is-danger.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#ed8796}html.theme--catppuccin-macchiato .is-danger.textarea:focus,html.theme--catppuccin-macchiato .is-danger.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-macchiato .is-danger.is-focused.textarea,html.theme--catppuccin-macchiato .is-danger.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-danger.textarea:active,html.theme--catppuccin-macchiato .is-danger.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-macchiato .is-danger.is-active.textarea,html.theme--catppuccin-macchiato .is-danger.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .is-small.textarea,html.theme--catppuccin-macchiato .is-small.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-macchiato .is-medium.textarea,html.theme--catppuccin-macchiato .is-medium.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .is-large.textarea,html.theme--catppuccin-macchiato .is-large.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .is-fullwidth.textarea,html.theme--catppuccin-macchiato .is-fullwidth.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-macchiato .is-inline.textarea,html.theme--catppuccin-macchiato .is-inline.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-macchiato .input.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-macchiato .input.is-static,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-macchiato .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-macchiato .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-macchiato .textarea[rows]{height:initial}html.theme--catppuccin-macchiato .textarea.has-fixed-size{resize:none}html.theme--catppuccin-macchiato .radio,html.theme--catppuccin-macchiato .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-macchiato .radio input,html.theme--catppuccin-macchiato .checkbox input{cursor:pointer}html.theme--catppuccin-macchiato .radio:hover,html.theme--catppuccin-macchiato .checkbox:hover{color:#91d7e3}html.theme--catppuccin-macchiato .radio[disabled],html.theme--catppuccin-macchiato .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .radio,fieldset[disabled] html.theme--catppuccin-macchiato .checkbox,html.theme--catppuccin-macchiato .radio input[disabled],html.theme--catppuccin-macchiato .checkbox input[disabled]{color:#f5f7fd;cursor:not-allowed}html.theme--catppuccin-macchiato .radio+.radio{margin-left:.5em}html.theme--catppuccin-macchiato .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-macchiato .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading)::after{border-color:#8aadf4;right:1.125em;z-index:4}html.theme--catppuccin-macchiato .select.is-rounded select,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-macchiato .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-macchiato .select select::-ms-expand{display:none}html.theme--catppuccin-macchiato .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-macchiato .select select:hover{border-color:#1e2030}html.theme--catppuccin-macchiato .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-macchiato .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-macchiato .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#91d7e3}html.theme--catppuccin-macchiato .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-macchiato .select.is-white select{border-color:#fff}html.theme--catppuccin-macchiato .select.is-white select:hover,html.theme--catppuccin-macchiato .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-macchiato .select.is-white select:focus,html.theme--catppuccin-macchiato .select.is-white select.is-focused,html.theme--catppuccin-macchiato .select.is-white select:active,html.theme--catppuccin-macchiato .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-macchiato .select.is-black select:hover,html.theme--catppuccin-macchiato .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-macchiato .select.is-black select:focus,html.theme--catppuccin-macchiato .select.is-black select.is-focused,html.theme--catppuccin-macchiato .select.is-black select:active,html.theme--catppuccin-macchiato .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-macchiato .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-macchiato .select.is-light select:hover,html.theme--catppuccin-macchiato .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-macchiato .select.is-light select:focus,html.theme--catppuccin-macchiato .select.is-light select.is-focused,html.theme--catppuccin-macchiato .select.is-light select:active,html.theme--catppuccin-macchiato .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .select.is-dark:not(:hover)::after,html.theme--catppuccin-macchiato .content kbd.select:not(:hover)::after{border-color:#363a4f}html.theme--catppuccin-macchiato .select.is-dark select,html.theme--catppuccin-macchiato .content kbd.select select{border-color:#363a4f}html.theme--catppuccin-macchiato .select.is-dark select:hover,html.theme--catppuccin-macchiato .content kbd.select select:hover,html.theme--catppuccin-macchiato .select.is-dark select.is-hovered,html.theme--catppuccin-macchiato .content kbd.select select.is-hovered{border-color:#2c2f40}html.theme--catppuccin-macchiato .select.is-dark select:focus,html.theme--catppuccin-macchiato .content kbd.select select:focus,html.theme--catppuccin-macchiato .select.is-dark select.is-focused,html.theme--catppuccin-macchiato .content kbd.select select.is-focused,html.theme--catppuccin-macchiato .select.is-dark select:active,html.theme--catppuccin-macchiato .content kbd.select select:active,html.theme--catppuccin-macchiato .select.is-dark select.is-active,html.theme--catppuccin-macchiato .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .select.is-primary:not(:hover)::after,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-primary select,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-primary select:hover,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-macchiato .select.is-primary select.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#739df2}html.theme--catppuccin-macchiato .select.is-primary select:focus,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-macchiato .select.is-primary select.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-macchiato .select.is-primary select:active,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-macchiato .select.is-primary select.is-active,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select.is-link:not(:hover)::after{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-link select{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-link select:hover,html.theme--catppuccin-macchiato .select.is-link select.is-hovered{border-color:#739df2}html.theme--catppuccin-macchiato .select.is-link select:focus,html.theme--catppuccin-macchiato .select.is-link select.is-focused,html.theme--catppuccin-macchiato .select.is-link select:active,html.theme--catppuccin-macchiato .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select.is-info:not(:hover)::after{border-color:#8bd5ca}html.theme--catppuccin-macchiato .select.is-info select{border-color:#8bd5ca}html.theme--catppuccin-macchiato .select.is-info select:hover,html.theme--catppuccin-macchiato .select.is-info select.is-hovered{border-color:#78cec1}html.theme--catppuccin-macchiato .select.is-info select:focus,html.theme--catppuccin-macchiato .select.is-info select.is-focused,html.theme--catppuccin-macchiato .select.is-info select:active,html.theme--catppuccin-macchiato .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .select.is-success:not(:hover)::after{border-color:#a6da95}html.theme--catppuccin-macchiato .select.is-success select{border-color:#a6da95}html.theme--catppuccin-macchiato .select.is-success select:hover,html.theme--catppuccin-macchiato .select.is-success select.is-hovered{border-color:#96d382}html.theme--catppuccin-macchiato .select.is-success select:focus,html.theme--catppuccin-macchiato .select.is-success select.is-focused,html.theme--catppuccin-macchiato .select.is-success select:active,html.theme--catppuccin-macchiato .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .select.is-warning:not(:hover)::after{border-color:#eed49f}html.theme--catppuccin-macchiato .select.is-warning select{border-color:#eed49f}html.theme--catppuccin-macchiato .select.is-warning select:hover,html.theme--catppuccin-macchiato .select.is-warning select.is-hovered{border-color:#eaca89}html.theme--catppuccin-macchiato .select.is-warning select:focus,html.theme--catppuccin-macchiato .select.is-warning select.is-focused,html.theme--catppuccin-macchiato .select.is-warning select:active,html.theme--catppuccin-macchiato .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .select.is-danger:not(:hover)::after{border-color:#ed8796}html.theme--catppuccin-macchiato .select.is-danger select{border-color:#ed8796}html.theme--catppuccin-macchiato .select.is-danger select:hover,html.theme--catppuccin-macchiato .select.is-danger select.is-hovered{border-color:#ea7183}html.theme--catppuccin-macchiato .select.is-danger select:focus,html.theme--catppuccin-macchiato .select.is-danger select.is-focused,html.theme--catppuccin-macchiato .select.is-danger select:active,html.theme--catppuccin-macchiato .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .select.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-macchiato .select.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .select.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .select.is-disabled::after{border-color:#f5f7fd !important;opacity:0.5}html.theme--catppuccin-macchiato .select.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .select.is-fullwidth select{width:100%}html.theme--catppuccin-macchiato .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-macchiato .select.is-loading.is-small:after,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-macchiato .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-macchiato .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-macchiato .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-macchiato .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:hover .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:focus .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:active .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-black:hover .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-black:focus .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-black:active .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:hover .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:focus .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:active .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-dark .file-cta,html.theme--catppuccin-macchiato .content kbd.file .file-cta{background-color:#363a4f;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-dark:hover .file-cta,html.theme--catppuccin-macchiato .content kbd.file:hover .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-hovered .file-cta{background-color:#313447;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-dark:focus .file-cta,html.theme--catppuccin-macchiato .content kbd.file:focus .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-focused .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,58,79,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-dark:active .file-cta,html.theme--catppuccin-macchiato .content kbd.file:active .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-active .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-active .file-cta{background-color:#2c2f40;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary:hover .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary:focus .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-focused .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(138,173,244,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-primary:active .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-active .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link .file-cta{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link:hover .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-hovered .file-cta{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link:focus .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(138,173,244,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-link:active .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-active .file-cta{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-info .file-cta{background-color:#8bd5ca;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:hover .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-hovered .file-cta{background-color:#82d2c6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:focus .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(139,213,202,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:active .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-active .file-cta{background-color:#78cec1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success .file-cta{background-color:#a6da95;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:hover .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-hovered .file-cta{background-color:#9ed78c;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:focus .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,218,149,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:active .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-active .file-cta{background-color:#96d382;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning .file-cta{background-color:#eed49f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:hover .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-hovered .file-cta{background-color:#eccf94;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:focus .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(238,212,159,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:active .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-active .file-cta{background-color:#eaca89;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-danger .file-cta{background-color:#ed8796;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-danger:hover .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-hovered .file-cta{background-color:#eb7c8c;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-danger:focus .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(237,135,150,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-danger:active .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-active .file-cta{background-color:#ea7183;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-macchiato .file.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .file.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-macchiato .file.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-macchiato .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-macchiato .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-macchiato .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-macchiato .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-macchiato .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-macchiato .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-macchiato .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-macchiato .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-macchiato .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-macchiato .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-macchiato .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-macchiato .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-macchiato .file.is-centered{justify-content:center}html.theme--catppuccin-macchiato .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-macchiato .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-macchiato .file.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-macchiato .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-macchiato .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-macchiato .file-label:hover .file-cta{background-color:#313447;color:#b5c1f1}html.theme--catppuccin-macchiato .file-label:hover .file-name{border-color:#565a71}html.theme--catppuccin-macchiato .file-label:active .file-cta{background-color:#2c2f40;color:#b5c1f1}html.theme--catppuccin-macchiato .file-label:active .file-name{border-color:#505469}html.theme--catppuccin-macchiato .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato .file-name{border-color:#5b6078;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-macchiato .file-cta{background-color:#363a4f;color:#cad3f5}html.theme--catppuccin-macchiato .file-name{border-color:#5b6078;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-macchiato .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-macchiato .file-icon .fa{font-size:14px}html.theme--catppuccin-macchiato .label{color:#b5c1f1;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-macchiato .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-macchiato .label.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-macchiato .label.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .label.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-macchiato .help.is-white{color:#fff}html.theme--catppuccin-macchiato .help.is-black{color:#0a0a0a}html.theme--catppuccin-macchiato .help.is-light{color:#f5f5f5}html.theme--catppuccin-macchiato .help.is-dark,html.theme--catppuccin-macchiato .content kbd.help{color:#363a4f}html.theme--catppuccin-macchiato .help.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.help.docs-sourcelink{color:#8aadf4}html.theme--catppuccin-macchiato .help.is-link{color:#8aadf4}html.theme--catppuccin-macchiato .help.is-info{color:#8bd5ca}html.theme--catppuccin-macchiato .help.is-success{color:#a6da95}html.theme--catppuccin-macchiato .help.is-warning{color:#eed49f}html.theme--catppuccin-macchiato .help.is-danger{color:#ed8796}html.theme--catppuccin-macchiato .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-macchiato .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-macchiato .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-macchiato .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-macchiato .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-macchiato .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-macchiato .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-macchiato .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-macchiato .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field.is-horizontal{display:flex}}html.theme--catppuccin-macchiato .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-macchiato .field-label.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-macchiato .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-macchiato .field-body .field{margin-bottom:0}html.theme--catppuccin-macchiato .field-body>.field{flex-shrink:1}html.theme--catppuccin-macchiato .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-macchiato .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-macchiato .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-macchiato .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select:focus~.icon{color:#363a4f}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-macchiato .control.has-icons-left .icon,html.theme--catppuccin-macchiato .control.has-icons-right .icon{color:#5b6078;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-macchiato .control.has-icons-left .input,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-macchiato .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-macchiato .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-macchiato .control.has-icons-right .input,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-macchiato .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-macchiato .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-macchiato .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-macchiato .control.is-loading.is-small:after,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-macchiato .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-macchiato .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-macchiato .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-macchiato .breadcrumb a{align-items:center;color:#8aadf4;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-macchiato .breadcrumb a:hover{color:#91d7e3}html.theme--catppuccin-macchiato .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-macchiato .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-macchiato .breadcrumb li.is-active a{color:#b5c1f1;cursor:default;pointer-events:none}html.theme--catppuccin-macchiato .breadcrumb li+li::before{color:#6e738d;content:"\0002f"}html.theme--catppuccin-macchiato .breadcrumb ul,html.theme--catppuccin-macchiato .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-macchiato .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-macchiato .breadcrumb.is-centered ol,html.theme--catppuccin-macchiato .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-macchiato .breadcrumb.is-right ol,html.theme--catppuccin-macchiato .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-macchiato .breadcrumb.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-macchiato .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-macchiato .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-macchiato .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-macchiato .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-macchiato .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#cad3f5;max-width:100%;position:relative}html.theme--catppuccin-macchiato .card-footer:first-child,html.theme--catppuccin-macchiato .card-content:first-child,html.theme--catppuccin-macchiato .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-macchiato .card-footer:last-child,html.theme--catppuccin-macchiato .card-content:last-child,html.theme--catppuccin-macchiato .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-macchiato .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-macchiato .card-header-title{align-items:center;color:#b5c1f1;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-macchiato .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-macchiato .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-macchiato .card-image{display:block;position:relative}html.theme--catppuccin-macchiato .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-macchiato .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-macchiato .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-macchiato .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-macchiato .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-macchiato .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-macchiato .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-macchiato .dropdown.is-active .dropdown-menu,html.theme--catppuccin-macchiato .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-macchiato .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-macchiato .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-macchiato .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-macchiato .dropdown-content{background-color:#1e2030;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-macchiato .dropdown-item{color:#cad3f5;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-macchiato a.dropdown-item,html.theme--catppuccin-macchiato button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-macchiato a.dropdown-item:hover,html.theme--catppuccin-macchiato button.dropdown-item:hover{background-color:#1e2030;color:#0a0a0a}html.theme--catppuccin-macchiato a.dropdown-item.is-active,html.theme--catppuccin-macchiato button.dropdown-item.is-active{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-macchiato .level{align-items:center;justify-content:space-between}html.theme--catppuccin-macchiato .level code{border-radius:.4em}html.theme--catppuccin-macchiato .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-macchiato .level.is-mobile{display:flex}html.theme--catppuccin-macchiato .level.is-mobile .level-left,html.theme--catppuccin-macchiato .level.is-mobile .level-right{display:flex}html.theme--catppuccin-macchiato .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-macchiato .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-macchiato .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level{display:flex}html.theme--catppuccin-macchiato .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-macchiato .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-macchiato .level-item .title,html.theme--catppuccin-macchiato .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-macchiato .level-left,html.theme--catppuccin-macchiato .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .level-left .level-item.is-flexible,html.theme--catppuccin-macchiato .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-left .level-item:not(:last-child),html.theme--catppuccin-macchiato .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-macchiato .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-left{display:flex}}html.theme--catppuccin-macchiato .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-right{display:flex}}html.theme--catppuccin-macchiato .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-macchiato .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-macchiato .media .media{border-top:1px solid rgba(91,96,120,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-macchiato .media .media .content:not(:last-child),html.theme--catppuccin-macchiato .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-macchiato .media .media .media{padding-top:.5rem}html.theme--catppuccin-macchiato .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-macchiato .media+.media{border-top:1px solid rgba(91,96,120,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-macchiato .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-macchiato .media-left,html.theme--catppuccin-macchiato .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .media-left{margin-right:1rem}html.theme--catppuccin-macchiato .media-right{margin-left:1rem}html.theme--catppuccin-macchiato .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .media-content{overflow-x:auto}}html.theme--catppuccin-macchiato .menu{font-size:1rem}html.theme--catppuccin-macchiato .menu.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-macchiato .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .menu.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .menu-list{line-height:1.25}html.theme--catppuccin-macchiato .menu-list a{border-radius:3px;color:#cad3f5;display:block;padding:0.5em 0.75em}html.theme--catppuccin-macchiato .menu-list a:hover{background-color:#1e2030;color:#b5c1f1}html.theme--catppuccin-macchiato .menu-list a.is-active{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .menu-list li ul{border-left:1px solid #5b6078;margin:.75em;padding-left:.75em}html.theme--catppuccin-macchiato .menu-label{color:#f5f7fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-macchiato .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-macchiato .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-macchiato .message{background-color:#1e2030;border-radius:.4em;font-size:1rem}html.theme--catppuccin-macchiato .message strong{color:currentColor}html.theme--catppuccin-macchiato .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-macchiato .message.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-macchiato .message.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .message.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .message.is-white{background-color:#fff}html.theme--catppuccin-macchiato .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-macchiato .message.is-black{background-color:#fafafa}html.theme--catppuccin-macchiato .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-macchiato .message.is-light{background-color:#fafafa}html.theme--catppuccin-macchiato .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-macchiato .message.is-dark,html.theme--catppuccin-macchiato .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-macchiato .message.is-dark .message-header,html.theme--catppuccin-macchiato .content kbd.message .message-header{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .message.is-dark .message-body,html.theme--catppuccin-macchiato .content kbd.message .message-body{border-color:#363a4f}html.theme--catppuccin-macchiato .message.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink{background-color:#ecf2fd}html.theme--catppuccin-macchiato .message.is-primary .message-header,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink .message-header{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .message.is-primary .message-body,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink .message-body{border-color:#8aadf4;color:#0e3b95}html.theme--catppuccin-macchiato .message.is-link{background-color:#ecf2fd}html.theme--catppuccin-macchiato .message.is-link .message-header{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .message.is-link .message-body{border-color:#8aadf4;color:#0e3b95}html.theme--catppuccin-macchiato .message.is-info{background-color:#f0faf8}html.theme--catppuccin-macchiato .message.is-info .message-header{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-info .message-body{border-color:#8bd5ca;color:#276d62}html.theme--catppuccin-macchiato .message.is-success{background-color:#f2faf0}html.theme--catppuccin-macchiato .message.is-success .message-header{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-success .message-body{border-color:#a6da95;color:#386e26}html.theme--catppuccin-macchiato .message.is-warning{background-color:#fcf7ee}html.theme--catppuccin-macchiato .message.is-warning .message-header{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-warning .message-body{border-color:#eed49f;color:#7e5c16}html.theme--catppuccin-macchiato .message.is-danger{background-color:#fcedef}html.theme--catppuccin-macchiato .message.is-danger .message-header{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .message.is-danger .message-body{border-color:#ed8796;color:#971729}html.theme--catppuccin-macchiato .message-header{align-items:center;background-color:#cad3f5;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-macchiato .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-macchiato .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .message-body{border-color:#5b6078;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#cad3f5;padding:1.25em 1.5em}html.theme--catppuccin-macchiato .message-body code,html.theme--catppuccin-macchiato .message-body pre{background-color:#fff}html.theme--catppuccin-macchiato .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-macchiato .modal.is-active{display:flex}html.theme--catppuccin-macchiato .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-macchiato .modal-content,html.theme--catppuccin-macchiato .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-macchiato .modal-content,html.theme--catppuccin-macchiato .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-macchiato .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-macchiato .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-macchiato .modal-card-head,html.theme--catppuccin-macchiato .modal-card-foot{align-items:center;background-color:#1e2030;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-macchiato .modal-card-head{border-bottom:1px solid #5b6078;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-macchiato .modal-card-title{color:#cad3f5;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-macchiato .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5b6078}html.theme--catppuccin-macchiato .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-macchiato .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#24273a;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-macchiato .navbar{background-color:#8aadf4;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-macchiato .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-macchiato .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-dark,html.theme--catppuccin-macchiato .content kbd.navbar{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-burger,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363a4f;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-burger,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6da95;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#eed49f;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#ed8796;color:#fff}}html.theme--catppuccin-macchiato .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-macchiato .navbar.has-shadow{box-shadow:0 2px 0 0 #1e2030}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom,html.theme--catppuccin-macchiato .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #1e2030}html.theme--catppuccin-macchiato .navbar.is-fixed-top{top:0}html.theme--catppuccin-macchiato html.has-navbar-fixed-top,html.theme--catppuccin-macchiato body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-macchiato .navbar-brand,html.theme--catppuccin-macchiato .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-macchiato .navbar-brand a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-macchiato .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-macchiato .navbar-burger{color:#cad3f5;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-macchiato .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-macchiato .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-macchiato .navbar-menu{display:none}html.theme--catppuccin-macchiato .navbar-item,html.theme--catppuccin-macchiato .navbar-link{color:#cad3f5;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-macchiato .navbar-item .icon:only-child,html.theme--catppuccin-macchiato .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-macchiato a.navbar-item,html.theme--catppuccin-macchiato .navbar-link{cursor:pointer}html.theme--catppuccin-macchiato a.navbar-item:focus,html.theme--catppuccin-macchiato a.navbar-item:focus-within,html.theme--catppuccin-macchiato a.navbar-item:hover,html.theme--catppuccin-macchiato a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar-link:focus,html.theme--catppuccin-macchiato .navbar-link:focus-within,html.theme--catppuccin-macchiato .navbar-link:hover,html.theme--catppuccin-macchiato .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}html.theme--catppuccin-macchiato .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .navbar-item img{max-height:1.75rem}html.theme--catppuccin-macchiato .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-macchiato .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-macchiato .navbar-item.is-tab:focus,html.theme--catppuccin-macchiato .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#8aadf4;border-bottom-style:solid;border-bottom-width:3px;color:#8aadf4;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-macchiato .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-macchiato .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-macchiato .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-macchiato .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .navbar>.container{display:block}html.theme--catppuccin-macchiato .navbar-brand .navbar-item,html.theme--catppuccin-macchiato .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-macchiato .navbar-link::after{display:none}html.theme--catppuccin-macchiato .navbar-menu{background-color:#8aadf4;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-macchiato .navbar-menu.is-active{display:block}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch,html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-macchiato .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-macchiato html.has-navbar-fixed-top-touch,html.theme--catppuccin-macchiato body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar,html.theme--catppuccin-macchiato .navbar-menu,html.theme--catppuccin-macchiato .navbar-start,html.theme--catppuccin-macchiato .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-macchiato .navbar{min-height:4rem}html.theme--catppuccin-macchiato .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-start,html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-macchiato .navbar.is-spaced a.navbar-item,html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8087a2}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}html.theme--catppuccin-macchiato .navbar-burger{display:none}html.theme--catppuccin-macchiato .navbar-item,html.theme--catppuccin-macchiato .navbar-link{align-items:center;display:flex}html.theme--catppuccin-macchiato .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-macchiato .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-macchiato .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-macchiato .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-macchiato .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-macchiato .navbar-dropdown{background-color:#8aadf4;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-macchiato .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8087a2}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-macchiato .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-macchiato .navbar-divider{display:block}html.theme--catppuccin-macchiato .navbar>.container .navbar-brand,html.theme--catppuccin-macchiato .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-macchiato .navbar>.container .navbar-menu,html.theme--catppuccin-macchiato .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-macchiato .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-macchiato html.has-navbar-fixed-top-desktop,html.theme--catppuccin-macchiato body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-macchiato html.has-spaced-navbar-fixed-top,html.theme--catppuccin-macchiato body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-macchiato html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-macchiato body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-macchiato a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar-link.is-active{color:#8aadf4}html.theme--catppuccin-macchiato a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-macchiato .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-macchiato .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-macchiato .pagination.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-macchiato .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-previous,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-next,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-link,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-macchiato .pagination,html.theme--catppuccin-macchiato .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link{border-color:#5b6078;color:#8aadf4;min-width:2.5em}html.theme--catppuccin-macchiato .pagination-previous:hover,html.theme--catppuccin-macchiato .pagination-next:hover,html.theme--catppuccin-macchiato .pagination-link:hover{border-color:#6e738d;color:#91d7e3}html.theme--catppuccin-macchiato .pagination-previous:focus,html.theme--catppuccin-macchiato .pagination-next:focus,html.theme--catppuccin-macchiato .pagination-link:focus{border-color:#6e738d}html.theme--catppuccin-macchiato .pagination-previous:active,html.theme--catppuccin-macchiato .pagination-next:active,html.theme--catppuccin-macchiato .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-macchiato .pagination-previous[disabled],html.theme--catppuccin-macchiato .pagination-previous.is-disabled,html.theme--catppuccin-macchiato .pagination-next[disabled],html.theme--catppuccin-macchiato .pagination-next.is-disabled,html.theme--catppuccin-macchiato .pagination-link[disabled],html.theme--catppuccin-macchiato .pagination-link.is-disabled{background-color:#5b6078;border-color:#5b6078;box-shadow:none;color:#f5f7fd;opacity:0.5}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-macchiato .pagination-link.is-current{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .pagination-ellipsis{color:#6e738d;pointer-events:none}html.theme--catppuccin-macchiato .pagination-list{flex-wrap:wrap}html.theme--catppuccin-macchiato .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .pagination{flex-wrap:wrap}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-macchiato .pagination-previous{order:2}html.theme--catppuccin-macchiato .pagination-next{order:3}html.theme--catppuccin-macchiato .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-macchiato .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-macchiato .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-macchiato .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-macchiato .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-macchiato .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-macchiato .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-macchiato .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-macchiato .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-macchiato .panel.is-dark .panel-heading,html.theme--catppuccin-macchiato .content kbd.panel .panel-heading{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-macchiato .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363a4f}html.theme--catppuccin-macchiato .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-macchiato .content kbd.panel .panel-block.is-active .panel-icon{color:#363a4f}html.theme--catppuccin-macchiato .panel.is-primary .panel-heading,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-link .panel-heading{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .panel.is-link .panel-tabs a.is-active{border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-link .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-info .panel-heading{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-info .panel-tabs a.is-active{border-bottom-color:#8bd5ca}html.theme--catppuccin-macchiato .panel.is-info .panel-block.is-active .panel-icon{color:#8bd5ca}html.theme--catppuccin-macchiato .panel.is-success .panel-heading{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6da95}html.theme--catppuccin-macchiato .panel.is-success .panel-block.is-active .panel-icon{color:#a6da95}html.theme--catppuccin-macchiato .panel.is-warning .panel-heading{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#eed49f}html.theme--catppuccin-macchiato .panel.is-warning .panel-block.is-active .panel-icon{color:#eed49f}html.theme--catppuccin-macchiato .panel.is-danger .panel-heading{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#ed8796}html.theme--catppuccin-macchiato .panel.is-danger .panel-block.is-active .panel-icon{color:#ed8796}html.theme--catppuccin-macchiato .panel-tabs:not(:last-child),html.theme--catppuccin-macchiato .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-macchiato .panel-heading{background-color:#494d64;border-radius:8px 8px 0 0;color:#b5c1f1;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-macchiato .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-macchiato .panel-tabs a{border-bottom:1px solid #5b6078;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-macchiato .panel-tabs a.is-active{border-bottom-color:#494d64;color:#739df2}html.theme--catppuccin-macchiato .panel-list a{color:#cad3f5}html.theme--catppuccin-macchiato .panel-list a:hover{color:#8aadf4}html.theme--catppuccin-macchiato .panel-block{align-items:center;color:#b5c1f1;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-macchiato .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-macchiato .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-macchiato .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-macchiato .panel-block.is-active{border-left-color:#8aadf4;color:#739df2}html.theme--catppuccin-macchiato .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-macchiato a.panel-block,html.theme--catppuccin-macchiato label.panel-block{cursor:pointer}html.theme--catppuccin-macchiato a.panel-block:hover,html.theme--catppuccin-macchiato label.panel-block:hover{background-color:#1e2030}html.theme--catppuccin-macchiato .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f5f7fd;margin-right:.75em}html.theme--catppuccin-macchiato .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-macchiato .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--catppuccin-macchiato .tabs a{align-items:center;border-bottom-color:#5b6078;border-bottom-style:solid;border-bottom-width:1px;color:#cad3f5;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-macchiato .tabs a:hover{border-bottom-color:#b5c1f1;color:#b5c1f1}html.theme--catppuccin-macchiato .tabs li{display:block}html.theme--catppuccin-macchiato .tabs li.is-active a{border-bottom-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .tabs ul{align-items:center;border-bottom-color:#5b6078;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-macchiato .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-macchiato .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-macchiato .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-macchiato .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-macchiato .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-macchiato .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-macchiato .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-macchiato .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-macchiato .tabs.is-boxed a:hover{background-color:#1e2030;border-bottom-color:#5b6078}html.theme--catppuccin-macchiato .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5b6078;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-macchiato .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .tabs.is-toggle a{border-color:#5b6078;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-macchiato .tabs.is-toggle a:hover{background-color:#1e2030;border-color:#6e738d;z-index:2}html.theme--catppuccin-macchiato .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-macchiato .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-macchiato .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-macchiato .tabs.is-toggle li.is-active a{background-color:#8aadf4;border-color:#8aadf4;color:#fff;z-index:1}html.theme--catppuccin-macchiato .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-macchiato .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-macchiato .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-macchiato .tabs.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-macchiato .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .column.is-narrow,html.theme--catppuccin-macchiato .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full,html.theme--catppuccin-macchiato .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters,html.theme--catppuccin-macchiato .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds,html.theme--catppuccin-macchiato .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half,html.theme--catppuccin-macchiato .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third,html.theme--catppuccin-macchiato .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter,html.theme--catppuccin-macchiato .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth,html.theme--catppuccin-macchiato .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths,html.theme--catppuccin-macchiato .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths,html.theme--catppuccin-macchiato .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths,html.theme--catppuccin-macchiato .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters,html.theme--catppuccin-macchiato .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds,html.theme--catppuccin-macchiato .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half,html.theme--catppuccin-macchiato .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third,html.theme--catppuccin-macchiato .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter,html.theme--catppuccin-macchiato .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth,html.theme--catppuccin-macchiato .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths,html.theme--catppuccin-macchiato .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths,html.theme--catppuccin-macchiato .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths,html.theme--catppuccin-macchiato .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0,html.theme--catppuccin-macchiato .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0,html.theme--catppuccin-macchiato .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1,html.theme--catppuccin-macchiato .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1,html.theme--catppuccin-macchiato .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2,html.theme--catppuccin-macchiato .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2,html.theme--catppuccin-macchiato .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3,html.theme--catppuccin-macchiato .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3,html.theme--catppuccin-macchiato .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4,html.theme--catppuccin-macchiato .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4,html.theme--catppuccin-macchiato .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5,html.theme--catppuccin-macchiato .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5,html.theme--catppuccin-macchiato .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6,html.theme--catppuccin-macchiato .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6,html.theme--catppuccin-macchiato .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7,html.theme--catppuccin-macchiato .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7,html.theme--catppuccin-macchiato .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8,html.theme--catppuccin-macchiato .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8,html.theme--catppuccin-macchiato .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9,html.theme--catppuccin-macchiato .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9,html.theme--catppuccin-macchiato .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10,html.theme--catppuccin-macchiato .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10,html.theme--catppuccin-macchiato .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11,html.theme--catppuccin-macchiato .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11,html.theme--catppuccin-macchiato .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12,html.theme--catppuccin-macchiato .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12,html.theme--catppuccin-macchiato .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-macchiato .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-macchiato .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-macchiato .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-macchiato .columns.is-centered{justify-content:center}html.theme--catppuccin-macchiato .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-macchiato .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-macchiato .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-macchiato .columns.is-mobile{display:flex}html.theme--catppuccin-macchiato .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-macchiato .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-desktop{display:flex}}html.theme--catppuccin-macchiato .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-macchiato .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-macchiato .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-macchiato .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-macchiato .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-macchiato .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-macchiato .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-macchiato .tile.is-child{margin:0 !important}html.theme--catppuccin-macchiato .tile.is-parent{padding:.75rem}html.theme--catppuccin-macchiato .tile.is-vertical{flex-direction:column}html.theme--catppuccin-macchiato .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .tile:not(.is-child){display:flex}html.theme--catppuccin-macchiato .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .tile.is-3{flex:none;width:25%}html.theme--catppuccin-macchiato .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .tile.is-6{flex:none;width:50%}html.theme--catppuccin-macchiato .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .tile.is-9{flex:none;width:75%}html.theme--catppuccin-macchiato .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-macchiato .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-macchiato .hero .navbar{background:none}html.theme--catppuccin-macchiato .hero .tabs ul{border-bottom:none}html.theme--catppuccin-macchiato .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-white strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-macchiato .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-macchiato .hero.is-white .navbar-item,html.theme--catppuccin-macchiato .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-macchiato .hero.is-white a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-white .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-macchiato .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-black strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-black .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-macchiato .hero.is-black .navbar-item,html.theme--catppuccin-macchiato .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-black a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-black .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-macchiato .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-light strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-macchiato .hero.is-light .navbar-item,html.theme--catppuccin-macchiato .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-light .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-macchiato .hero.is-dark,html.theme--catppuccin-macchiato .content kbd.hero{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-dark strong,html.theme--catppuccin-macchiato .content kbd.hero strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-dark .title,html.theme--catppuccin-macchiato .content kbd.hero .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .subtitle,html.theme--catppuccin-macchiato .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-macchiato .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-dark .subtitle strong,html.theme--catppuccin-macchiato .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-dark .navbar-menu,html.theme--catppuccin-macchiato .content kbd.hero .navbar-menu{background-color:#363a4f}}html.theme--catppuccin-macchiato .hero.is-dark .navbar-item,html.theme--catppuccin-macchiato .content kbd.hero .navbar-item,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .tabs a,html.theme--catppuccin-macchiato .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-dark .tabs a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs li.is-active a{color:#363a4f !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .hero.is-dark.is-bold,html.theme--catppuccin-macchiato .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1d2535 0%, #363a4f 71%, #3d3c62 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-macchiato .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1d2535 0%, #363a4f 71%, #3d3c62 100%)}}html.theme--catppuccin-macchiato .hero.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-primary strong,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-primary .title,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .subtitle,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-primary .subtitle strong,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-primary .navbar-menu,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#8aadf4}}html.theme--catppuccin-macchiato .hero.is-primary .navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .tabs a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-primary .tabs a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#8aadf4 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .hero.is-primary.is-bold,html.theme--catppuccin-macchiato .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-macchiato .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}}html.theme--catppuccin-macchiato .hero.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-link strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-link .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-link .navbar-menu{background-color:#8aadf4}}html.theme--catppuccin-macchiato .hero.is-link .navbar-item,html.theme--catppuccin-macchiato .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-link a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-link .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-link .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-link .tabs li.is-active a{color:#8aadf4 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .hero.is-link.is-bold{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}}html.theme--catppuccin-macchiato .hero.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-info strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-info .navbar-menu{background-color:#8bd5ca}}html.theme--catppuccin-macchiato .hero.is-info .navbar-item,html.theme--catppuccin-macchiato .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-info .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-info .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-info .tabs li.is-active a{color:#8bd5ca !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .hero.is-info.is-bold{background-image:linear-gradient(141deg, #5bd2ac 0%, #8bd5ca 71%, #9adedf 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #5bd2ac 0%, #8bd5ca 71%, #9adedf 100%)}}html.theme--catppuccin-macchiato .hero.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-success strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-success .navbar-menu{background-color:#a6da95}}html.theme--catppuccin-macchiato .hero.is-success .navbar-item,html.theme--catppuccin-macchiato .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-success .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-success .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-success .tabs li.is-active a{color:#a6da95 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .hero.is-success.is-bold{background-image:linear-gradient(141deg, #94d765 0%, #a6da95 71%, #aae4a5 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #94d765 0%, #a6da95 71%, #aae4a5 100%)}}html.theme--catppuccin-macchiato .hero.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-warning strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-warning .navbar-menu{background-color:#eed49f}}html.theme--catppuccin-macchiato .hero.is-warning .navbar-item,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-warning .tabs li.is-active a{color:#eed49f !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #efae6b 0%, #eed49f 71%, #f4e9b2 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #efae6b 0%, #eed49f 71%, #f4e9b2 100%)}}html.theme--catppuccin-macchiato .hero.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-danger strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-danger .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-danger .navbar-menu{background-color:#ed8796}}html.theme--catppuccin-macchiato .hero.is-danger .navbar-item,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-danger .tabs li.is-active a{color:#ed8796 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #f05183 0%, #ed8796 71%, #f39c9a 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f05183 0%, #ed8796 71%, #f39c9a 100%)}}html.theme--catppuccin-macchiato .hero.is-small .hero-body,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-macchiato .hero.is-halfheight .hero-body,html.theme--catppuccin-macchiato .hero.is-fullheight .hero-body,html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-macchiato .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-macchiato .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-macchiato .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-macchiato .hero-video{overflow:hidden}html.theme--catppuccin-macchiato .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-macchiato .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero-video{display:none}}html.theme--catppuccin-macchiato .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero-buttons .button{display:flex}html.theme--catppuccin-macchiato .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-macchiato .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-macchiato .hero-head,html.theme--catppuccin-macchiato .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero-body{padding:3rem 3rem}}html.theme--catppuccin-macchiato .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .section{padding:3rem 3rem}html.theme--catppuccin-macchiato .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-macchiato .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-macchiato .footer{background-color:#1e2030;padding:3rem 1.5rem 6rem}html.theme--catppuccin-macchiato h1 .docs-heading-anchor,html.theme--catppuccin-macchiato h1 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h1 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h2 .docs-heading-anchor,html.theme--catppuccin-macchiato h2 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h2 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h3 .docs-heading-anchor,html.theme--catppuccin-macchiato h3 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h3 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h4 .docs-heading-anchor,html.theme--catppuccin-macchiato h4 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h4 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h5 .docs-heading-anchor,html.theme--catppuccin-macchiato h5 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h5 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h6 .docs-heading-anchor,html.theme--catppuccin-macchiato h6 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h6 .docs-heading-anchor:visited{color:#cad3f5}html.theme--catppuccin-macchiato h1 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h2 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h3 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h4 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h5 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-macchiato h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-macchiato h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-macchiato .docs-light-only{display:none !important}html.theme--catppuccin-macchiato pre{position:relative;overflow:hidden}html.theme--catppuccin-macchiato pre code,html.theme--catppuccin-macchiato pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-macchiato pre code:first-of-type,html.theme--catppuccin-macchiato pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-macchiato pre code:last-of-type,html.theme--catppuccin-macchiato pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-macchiato pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#cad3f5;cursor:pointer;text-align:center}html.theme--catppuccin-macchiato pre .copy-button:focus,html.theme--catppuccin-macchiato pre .copy-button:hover{opacity:1;background:rgba(202,211,245,0.1);color:#8aadf4}html.theme--catppuccin-macchiato pre .copy-button.success{color:#a6da95;opacity:1}html.theme--catppuccin-macchiato pre .copy-button.error{color:#ed8796;opacity:1}html.theme--catppuccin-macchiato pre:hover .copy-button{opacity:1}html.theme--catppuccin-macchiato .admonition{background-color:#1e2030;border-style:solid;border-width:2px;border-color:#b8c0e0;border-radius:4px;font-size:1rem}html.theme--catppuccin-macchiato .admonition strong{color:currentColor}html.theme--catppuccin-macchiato .admonition.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-macchiato .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .admonition.is-default{background-color:#1e2030;border-color:#b8c0e0}html.theme--catppuccin-macchiato .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#b8c0e0}html.theme--catppuccin-macchiato .admonition.is-default>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-info{background-color:#1e2030;border-color:#8bd5ca}html.theme--catppuccin-macchiato .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#8bd5ca}html.theme--catppuccin-macchiato .admonition.is-info>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-success{background-color:#1e2030;border-color:#a6da95}html.theme--catppuccin-macchiato .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6da95}html.theme--catppuccin-macchiato .admonition.is-success>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-warning{background-color:#1e2030;border-color:#eed49f}html.theme--catppuccin-macchiato .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#eed49f}html.theme--catppuccin-macchiato .admonition.is-warning>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-danger{background-color:#1e2030;border-color:#ed8796}html.theme--catppuccin-macchiato .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#ed8796}html.theme--catppuccin-macchiato .admonition.is-danger>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-compat{background-color:#1e2030;border-color:#91d7e3}html.theme--catppuccin-macchiato .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#91d7e3}html.theme--catppuccin-macchiato .admonition.is-compat>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition-header{color:#b8c0e0;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-macchiato .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-macchiato details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-macchiato details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-macchiato details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-macchiato .admonition-body{color:#cad3f5;padding:0.5rem .75rem}html.theme--catppuccin-macchiato .admonition-body pre{background-color:#1e2030}html.theme--catppuccin-macchiato .admonition-body code{background-color:#1e2030}html.theme--catppuccin-macchiato .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #5b6078;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-macchiato .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#1e2030;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5b6078;overflow:auto}html.theme--catppuccin-macchiato .docstring>header code{background-color:transparent}html.theme--catppuccin-macchiato .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-macchiato .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-macchiato .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-macchiato .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5b6078}html.theme--catppuccin-macchiato .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-macchiato .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-macchiato .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-macchiato .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-macchiato .documenter-example-output{background-color:#24273a}html.theme--catppuccin-macchiato .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#1e2030;color:#cad3f5;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-macchiato .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-macchiato .outdated-warning-overlay a{color:#8aadf4}html.theme--catppuccin-macchiato .outdated-warning-overlay a:hover{color:#91d7e3}html.theme--catppuccin-macchiato .content pre{border:2px solid #5b6078;border-radius:4px}html.theme--catppuccin-macchiato .content code{font-weight:inherit}html.theme--catppuccin-macchiato .content a code{color:#8aadf4}html.theme--catppuccin-macchiato .content a:hover code{color:#91d7e3}html.theme--catppuccin-macchiato .content h1 code,html.theme--catppuccin-macchiato .content h2 code,html.theme--catppuccin-macchiato .content h3 code,html.theme--catppuccin-macchiato .content h4 code,html.theme--catppuccin-macchiato .content h5 code,html.theme--catppuccin-macchiato .content h6 code{color:#cad3f5}html.theme--catppuccin-macchiato .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-macchiato .content blockquote>ul:first-child,html.theme--catppuccin-macchiato .content blockquote>ol:first-child,html.theme--catppuccin-macchiato .content .admonition-body>ul:first-child,html.theme--catppuccin-macchiato .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-macchiato pre,html.theme--catppuccin-macchiato code{font-variant-ligatures:no-contextual}html.theme--catppuccin-macchiato .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-macchiato .breadcrumb a.is-disabled,html.theme--catppuccin-macchiato .breadcrumb a.is-disabled:hover{color:#b5c1f1}html.theme--catppuccin-macchiato .hljs{background:initial !important}html.theme--catppuccin-macchiato .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-macchiato .katex-display,html.theme--catppuccin-macchiato mjx-container,html.theme--catppuccin-macchiato .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-macchiato html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-macchiato li.no-marker{list-style:none}html.theme--catppuccin-macchiato #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-macchiato #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main{width:100%}html.theme--catppuccin-macchiato #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-macchiato #documenter .docs-main>header,html.theme--catppuccin-macchiato #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar{background-color:#24273a;border-bottom:1px solid #5b6078;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes{border-top:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-macchiato .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5b6078;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-macchiato #documenter .docs-sidebar{display:flex;flex-direction:column;color:#cad3f5;background-color:#1e2030;border-right:1px solid #5b6078;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-macchiato #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name a:hover{color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5b6078;display:none;padding:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5b6078;padding-bottom:1.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#cad3f5;background:#1e2030}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#cad3f5;background-color:#26283d}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5b6078;border-bottom:1px solid #5b6078;background-color:#181926}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#181926;color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#26283d;color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#2e3149}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#3d4162}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#2e3149}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#3d4162}}html.theme--catppuccin-macchiato kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-macchiato .search-min-width-50{min-width:50%}html.theme--catppuccin-macchiato .search-min-height-100{min-height:100%}html.theme--catppuccin-macchiato .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-macchiato .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover,html.theme--catppuccin-macchiato .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-macchiato .search-result-link .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-macchiato .property-search-result-badge,html.theme--catppuccin-macchiato .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-macchiato .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:hover .search-filter,html.theme--catppuccin-macchiato .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-macchiato .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-macchiato .search-filter:hover,html.theme--catppuccin-macchiato .search-filter:focus{color:#333}html.theme--catppuccin-macchiato .search-filter-selected{color:#363a4f;background-color:#b7bdf8}html.theme--catppuccin-macchiato .search-filter-selected:hover,html.theme--catppuccin-macchiato .search-filter-selected:focus{color:#363a4f}html.theme--catppuccin-macchiato .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-macchiato .search-divider{border-bottom:1px solid #5b6078}html.theme--catppuccin-macchiato .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-macchiato .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-macchiato .w-100{width:100%}html.theme--catppuccin-macchiato .gap-2{gap:0.5rem}html.theme--catppuccin-macchiato .gap-4{gap:1rem}html.theme--catppuccin-macchiato .gap-8{gap:2rem}html.theme--catppuccin-macchiato{background-color:#24273a;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-macchiato a{transition:all 200ms ease}html.theme--catppuccin-macchiato .label{color:#cad3f5}html.theme--catppuccin-macchiato .button,html.theme--catppuccin-macchiato .control.has-icons-left .icon,html.theme--catppuccin-macchiato .control.has-icons-right .icon,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .select,html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea{height:2.5em;color:#cad3f5}html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#cad3f5}html.theme--catppuccin-macchiato .select:after,html.theme--catppuccin-macchiato .select select{border-width:1px}html.theme--catppuccin-macchiato .menu-list a{transition:all 300ms ease}html.theme--catppuccin-macchiato .modal-card-foot,html.theme--catppuccin-macchiato .modal-card-head{border-color:#5b6078}html.theme--catppuccin-macchiato .navbar{border-radius:.4em}html.theme--catppuccin-macchiato .navbar.is-transparent{background:none}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .navbar .navbar-menu{background-color:#8aadf4;border-radius:0 0 .4em .4em}}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){color:#363a4f}html.theme--catppuccin-macchiato .tag.is-link:not(body),html.theme--catppuccin-macchiato .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-macchiato .content kbd.is-link:not(body){color:#363a4f}html.theme--catppuccin-macchiato .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-macchiato .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-macchiato .ansi span.sgr3{font-style:italic}html.theme--catppuccin-macchiato .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-macchiato .ansi span.sgr7{color:#24273a;background-color:#cad3f5}html.theme--catppuccin-macchiato .ansi span.sgr8{color:transparent}html.theme--catppuccin-macchiato .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-macchiato .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-macchiato .ansi span.sgr30{color:#494d64}html.theme--catppuccin-macchiato .ansi span.sgr31{color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr32{color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr33{color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr34{color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr35{color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr36{color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr37{color:#b8c0e0}html.theme--catppuccin-macchiato .ansi span.sgr40{background-color:#494d64}html.theme--catppuccin-macchiato .ansi span.sgr41{background-color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr42{background-color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr43{background-color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr44{background-color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr45{background-color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr46{background-color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr47{background-color:#b8c0e0}html.theme--catppuccin-macchiato .ansi span.sgr90{color:#5b6078}html.theme--catppuccin-macchiato .ansi span.sgr91{color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr92{color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr93{color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr94{color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr95{color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr96{color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr97{color:#a5adcb}html.theme--catppuccin-macchiato .ansi span.sgr100{background-color:#5b6078}html.theme--catppuccin-macchiato .ansi span.sgr101{background-color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr102{background-color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr103{background-color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr104{background-color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr105{background-color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr106{background-color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr107{background-color:#a5adcb}html.theme--catppuccin-macchiato code.language-julia-repl>span.hljs-meta{color:#a6da95;font-weight:bolder}html.theme--catppuccin-macchiato code .hljs{color:#cad3f5;background:#24273a}html.theme--catppuccin-macchiato code .hljs-keyword{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-built_in{color:#ed8796}html.theme--catppuccin-macchiato code .hljs-type{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-literal{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-number{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-operator{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-punctuation{color:#b8c0e0}html.theme--catppuccin-macchiato code .hljs-property{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-regexp{color:#f5bde6}html.theme--catppuccin-macchiato code .hljs-string{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-char.escape_{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-subst{color:#a5adcb}html.theme--catppuccin-macchiato code .hljs-symbol{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-variable{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-variable.language_{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-variable.constant_{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-title{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-title.class_{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-title.function_{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-params{color:#cad3f5}html.theme--catppuccin-macchiato code .hljs-comment{color:#5b6078}html.theme--catppuccin-macchiato code .hljs-doctag{color:#ed8796}html.theme--catppuccin-macchiato code .hljs-meta{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-section{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-tag{color:#a5adcb}html.theme--catppuccin-macchiato code .hljs-name{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-attr{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-attribute{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-bullet{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-code{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-emphasis{color:#ed8796;font-style:italic}html.theme--catppuccin-macchiato code .hljs-strong{color:#ed8796;font-weight:bold}html.theme--catppuccin-macchiato code .hljs-formula{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-link{color:#7dc4e4;font-style:italic}html.theme--catppuccin-macchiato code .hljs-quote{color:#a6da95;font-style:italic}html.theme--catppuccin-macchiato code .hljs-selector-tag{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-selector-id{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-selector-class{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-selector-attr{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-selector-pseudo{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-template-tag{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-template-variable{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-addition{color:#a6da95;background:rgba(166,227,161,0.15)}html.theme--catppuccin-macchiato code .hljs-deletion{color:#ed8796;background:rgba(243,139,168,0.15)}html.theme--catppuccin-macchiato .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover,html.theme--catppuccin-macchiato .search-result-link:focus{background-color:#363a4f}html.theme--catppuccin-macchiato .search-result-link .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:hover .search-filter,html.theme--catppuccin-macchiato .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:focus .search-filter{color:#363a4f !important;background-color:#b7bdf8 !important}html.theme--catppuccin-macchiato .search-result-title{color:#cad3f5}html.theme--catppuccin-macchiato .search-result-highlight{background-color:#ed8796;color:#1e2030}html.theme--catppuccin-macchiato .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-macchiato .w-100{width:100%}html.theme--catppuccin-macchiato .gap-2{gap:0.5rem}html.theme--catppuccin-macchiato .gap-4{gap:1rem} diff --git a/dev/assets/themes/catppuccin-mocha.css b/dev/assets/themes/catppuccin-mocha.css new file mode 100644 index 00000000..6f27b4c5 --- /dev/null +++ b/dev/assets/themes/catppuccin-mocha.css @@ -0,0 +1 @@ +html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-mocha .pagination-previous:focus,html.theme--catppuccin-mocha .pagination-next:focus,html.theme--catppuccin-mocha .pagination-link:focus,html.theme--catppuccin-mocha .pagination-ellipsis:focus,html.theme--catppuccin-mocha .file-cta:focus,html.theme--catppuccin-mocha .file-name:focus,html.theme--catppuccin-mocha .select select:focus,html.theme--catppuccin-mocha .textarea:focus,html.theme--catppuccin-mocha .input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-mocha .button:focus,html.theme--catppuccin-mocha .is-focused.pagination-previous,html.theme--catppuccin-mocha .is-focused.pagination-next,html.theme--catppuccin-mocha .is-focused.pagination-link,html.theme--catppuccin-mocha .is-focused.pagination-ellipsis,html.theme--catppuccin-mocha .is-focused.file-cta,html.theme--catppuccin-mocha .is-focused.file-name,html.theme--catppuccin-mocha .select select.is-focused,html.theme--catppuccin-mocha .is-focused.textarea,html.theme--catppuccin-mocha .is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-focused.button,html.theme--catppuccin-mocha .pagination-previous:active,html.theme--catppuccin-mocha .pagination-next:active,html.theme--catppuccin-mocha .pagination-link:active,html.theme--catppuccin-mocha .pagination-ellipsis:active,html.theme--catppuccin-mocha .file-cta:active,html.theme--catppuccin-mocha .file-name:active,html.theme--catppuccin-mocha .select select:active,html.theme--catppuccin-mocha .textarea:active,html.theme--catppuccin-mocha .input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-mocha .button:active,html.theme--catppuccin-mocha .is-active.pagination-previous,html.theme--catppuccin-mocha .is-active.pagination-next,html.theme--catppuccin-mocha .is-active.pagination-link,html.theme--catppuccin-mocha .is-active.pagination-ellipsis,html.theme--catppuccin-mocha .is-active.file-cta,html.theme--catppuccin-mocha .is-active.file-name,html.theme--catppuccin-mocha .select select.is-active,html.theme--catppuccin-mocha .is-active.textarea,html.theme--catppuccin-mocha .is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .is-active.button{outline:none}html.theme--catppuccin-mocha .pagination-previous[disabled],html.theme--catppuccin-mocha .pagination-next[disabled],html.theme--catppuccin-mocha .pagination-link[disabled],html.theme--catppuccin-mocha .pagination-ellipsis[disabled],html.theme--catppuccin-mocha .file-cta[disabled],html.theme--catppuccin-mocha .file-name[disabled],html.theme--catppuccin-mocha .select select[disabled],html.theme--catppuccin-mocha .textarea[disabled],html.theme--catppuccin-mocha .input[disabled],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-mocha .button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-mocha .select select,fieldset[disabled] html.theme--catppuccin-mocha .textarea,fieldset[disabled] html.theme--catppuccin-mocha .input,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha fieldset[disabled] .select select,html.theme--catppuccin-mocha .select fieldset[disabled] select,html.theme--catppuccin-mocha fieldset[disabled] .textarea,html.theme--catppuccin-mocha fieldset[disabled] .input,html.theme--catppuccin-mocha fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-mocha .button,html.theme--catppuccin-mocha fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-mocha .tabs,html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .breadcrumb,html.theme--catppuccin-mocha .file,html.theme--catppuccin-mocha .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-mocha .admonition:not(:last-child),html.theme--catppuccin-mocha .tabs:not(:last-child),html.theme--catppuccin-mocha .pagination:not(:last-child),html.theme--catppuccin-mocha .message:not(:last-child),html.theme--catppuccin-mocha .level:not(:last-child),html.theme--catppuccin-mocha .breadcrumb:not(:last-child),html.theme--catppuccin-mocha .block:not(:last-child),html.theme--catppuccin-mocha .title:not(:last-child),html.theme--catppuccin-mocha .subtitle:not(:last-child),html.theme--catppuccin-mocha .table-container:not(:last-child),html.theme--catppuccin-mocha .table:not(:last-child),html.theme--catppuccin-mocha .progress:not(:last-child),html.theme--catppuccin-mocha .notification:not(:last-child),html.theme--catppuccin-mocha .content:not(:last-child),html.theme--catppuccin-mocha .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .modal-close,html.theme--catppuccin-mocha .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-mocha .modal-close::before,html.theme--catppuccin-mocha .delete::before,html.theme--catppuccin-mocha .modal-close::after,html.theme--catppuccin-mocha .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-mocha .modal-close::before,html.theme--catppuccin-mocha .delete::before{height:2px;width:50%}html.theme--catppuccin-mocha .modal-close::after,html.theme--catppuccin-mocha .delete::after{height:50%;width:2px}html.theme--catppuccin-mocha .modal-close:hover,html.theme--catppuccin-mocha .delete:hover,html.theme--catppuccin-mocha .modal-close:focus,html.theme--catppuccin-mocha .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-mocha .modal-close:active,html.theme--catppuccin-mocha .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-mocha .is-small.modal-close,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-mocha .is-small.delete,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-mocha .is-medium.modal-close,html.theme--catppuccin-mocha .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-mocha .is-large.modal-close,html.theme--catppuccin-mocha .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-mocha .control.is-loading::after,html.theme--catppuccin-mocha .select.is-loading::after,html.theme--catppuccin-mocha .loader,html.theme--catppuccin-mocha .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #7f849c;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-mocha .hero-video,html.theme--catppuccin-mocha .modal-background,html.theme--catppuccin-mocha .modal,html.theme--catppuccin-mocha .image.is-square img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-mocha .image.is-square .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-mocha .image.is-1by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-mocha .image.is-1by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-mocha .image.is-5by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-mocha .image.is-5by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-mocha .image.is-4by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-mocha .image.is-4by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-mocha .image.is-3by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-mocha .image.is-5by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-mocha .image.is-5by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-mocha .image.is-16by9 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-mocha .image.is-16by9 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-mocha .image.is-2by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-mocha .image.is-2by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-mocha .image.is-3by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-mocha .image.is-3by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-mocha .image.is-4by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-mocha .image.is-4by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-mocha .image.is-3by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-mocha .image.is-3by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-mocha .image.is-2by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-mocha .image.is-2by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-mocha .image.is-3by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-mocha .image.is-9by16 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-mocha .image.is-9by16 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-mocha .image.is-1by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-mocha .image.is-1by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-mocha .image.is-1by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-mocha .image.is-1by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-mocha .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#313244 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c26 !important}.has-background-dark{background-color:#313244 !important}.has-text-primary{color:#89b4fa !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#5895f8 !important}.has-background-primary{background-color:#89b4fa !important}.has-text-primary-light{color:#ebf3fe !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bbd3fc !important}.has-background-primary-light{background-color:#ebf3fe !important}.has-text-primary-dark{color:#063c93 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#0850c4 !important}.has-background-primary-dark{background-color:#063c93 !important}.has-text-link{color:#89b4fa !important}a.has-text-link:hover,a.has-text-link:focus{color:#5895f8 !important}.has-background-link{background-color:#89b4fa !important}.has-text-link-light{color:#ebf3fe !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bbd3fc !important}.has-background-link-light{background-color:#ebf3fe !important}.has-text-link-dark{color:#063c93 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#0850c4 !important}.has-background-link-dark{background-color:#063c93 !important}.has-text-info{color:#94e2d5 !important}a.has-text-info:hover,a.has-text-info:focus{color:#6cd7c5 !important}.has-background-info{background-color:#94e2d5 !important}.has-text-info-light{color:#effbf9 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c7f0e9 !important}.has-background-info-light{background-color:#effbf9 !important}.has-text-info-dark{color:#207466 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#2a9c89 !important}.has-background-info-dark{background-color:#207466 !important}.has-text-success{color:#a6e3a1 !important}a.has-text-success:hover,a.has-text-success:focus{color:#81d77a !important}.has-background-success{background-color:#a6e3a1 !important}.has-text-success-light{color:#f0faef !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#cbefc8 !important}.has-background-success-light{background-color:#f0faef !important}.has-text-success-dark{color:#287222 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#36992e !important}.has-background-success-dark{background-color:#287222 !important}.has-text-warning{color:#f9e2af !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#f5d180 !important}.has-background-warning{background-color:#f9e2af !important}.has-text-warning-light{color:#fef8ec !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fae7bd !important}.has-background-warning-light{background-color:#fef8ec !important}.has-text-warning-dark{color:#8a620a !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#b9840e !important}.has-background-warning-dark{background-color:#8a620a !important}.has-text-danger{color:#f38ba8 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#ee5d85 !important}.has-background-danger{background-color:#f38ba8 !important}.has-text-danger-light{color:#fdedf1 !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f8bece !important}.has-background-danger-light{background-color:#fdedf1 !important}.has-text-danger-dark{color:#991036 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c71546 !important}.has-background-danger-dark{background-color:#991036 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#313244 !important}.has-background-grey-darker{background-color:#313244 !important}.has-text-grey-dark{color:#45475a !important}.has-background-grey-dark{background-color:#45475a !important}.has-text-grey{color:#585b70 !important}.has-background-grey{background-color:#585b70 !important}.has-text-grey-light{color:#6c7086 !important}.has-background-grey-light{background-color:#6c7086 !important}.has-text-grey-lighter{color:#7f849c !important}.has-background-grey-lighter{background-color:#7f849c !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--catppuccin-mocha html{background-color:#1e1e2e;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-mocha article,html.theme--catppuccin-mocha aside,html.theme--catppuccin-mocha figure,html.theme--catppuccin-mocha footer,html.theme--catppuccin-mocha header,html.theme--catppuccin-mocha hgroup,html.theme--catppuccin-mocha section{display:block}html.theme--catppuccin-mocha body,html.theme--catppuccin-mocha button,html.theme--catppuccin-mocha input,html.theme--catppuccin-mocha optgroup,html.theme--catppuccin-mocha select,html.theme--catppuccin-mocha textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-mocha code,html.theme--catppuccin-mocha pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-mocha body{color:#cdd6f4;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-mocha a{color:#89b4fa;cursor:pointer;text-decoration:none}html.theme--catppuccin-mocha a strong{color:currentColor}html.theme--catppuccin-mocha a:hover{color:#89dceb}html.theme--catppuccin-mocha code{background-color:#181825;color:#cdd6f4;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-mocha hr{background-color:#181825;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-mocha img{height:auto;max-width:100%}html.theme--catppuccin-mocha input[type="checkbox"],html.theme--catppuccin-mocha input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-mocha small{font-size:.875em}html.theme--catppuccin-mocha span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-mocha strong{color:#b8c5ef;font-weight:700}html.theme--catppuccin-mocha fieldset{border:none}html.theme--catppuccin-mocha pre{-webkit-overflow-scrolling:touch;background-color:#181825;color:#cdd6f4;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-mocha pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-mocha table td,html.theme--catppuccin-mocha table th{vertical-align:top}html.theme--catppuccin-mocha table td:not([align]),html.theme--catppuccin-mocha table th:not([align]){text-align:inherit}html.theme--catppuccin-mocha table th{color:#b8c5ef}html.theme--catppuccin-mocha .box{background-color:#45475a;border-radius:8px;box-shadow:none;color:#cdd6f4;display:block;padding:1.25rem}html.theme--catppuccin-mocha a.box:hover,html.theme--catppuccin-mocha a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #89b4fa}html.theme--catppuccin-mocha a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #89b4fa}html.theme--catppuccin-mocha .button{background-color:#181825;border-color:#363653;border-width:1px;color:#89b4fa;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-mocha .button strong{color:inherit}html.theme--catppuccin-mocha .button .icon,html.theme--catppuccin-mocha .button .icon.is-small,html.theme--catppuccin-mocha .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-mocha .button .icon.is-medium,html.theme--catppuccin-mocha .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-mocha .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-mocha .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-mocha .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-mocha .button:hover,html.theme--catppuccin-mocha .button.is-hovered{border-color:#6c7086;color:#b8c5ef}html.theme--catppuccin-mocha .button:focus,html.theme--catppuccin-mocha .button.is-focused{border-color:#6c7086;color:#71a4f9}html.theme--catppuccin-mocha .button:focus:not(:active),html.theme--catppuccin-mocha .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button:active,html.theme--catppuccin-mocha .button.is-active{border-color:#45475a;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text{background-color:transparent;border-color:transparent;color:#cdd6f4;text-decoration:underline}html.theme--catppuccin-mocha .button.is-text:hover,html.theme--catppuccin-mocha .button.is-text.is-hovered,html.theme--catppuccin-mocha .button.is-text:focus,html.theme--catppuccin-mocha .button.is-text.is-focused{background-color:#181825;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text:active,html.theme--catppuccin-mocha .button.is-text.is-active{background-color:#0e0e16;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-mocha .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#89b4fa;text-decoration:none}html.theme--catppuccin-mocha .button.is-ghost:hover,html.theme--catppuccin-mocha .button.is-ghost.is-hovered{color:#89b4fa;text-decoration:underline}html.theme--catppuccin-mocha .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:hover,html.theme--catppuccin-mocha .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:focus,html.theme--catppuccin-mocha .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:focus:not(:active),html.theme--catppuccin-mocha .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .button.is-white:active,html.theme--catppuccin-mocha .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-mocha .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted:hover,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-mocha .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-outlined:hover,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-white.is-outlined:focus,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:hover,html.theme--catppuccin-mocha .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:focus,html.theme--catppuccin-mocha .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:focus:not(:active),html.theme--catppuccin-mocha .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .button.is-black:active,html.theme--catppuccin-mocha .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-mocha .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted:hover,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-outlined:hover,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-black.is-outlined:focus,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:hover,html.theme--catppuccin-mocha .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:focus,html.theme--catppuccin-mocha .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:focus:not(:active),html.theme--catppuccin-mocha .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .button.is-light:active,html.theme--catppuccin-mocha .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-mocha .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted:hover,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-outlined:hover,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-light.is-outlined:focus,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-dark,html.theme--catppuccin-mocha .content kbd.button{background-color:#313244;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:hover,html.theme--catppuccin-mocha .content kbd.button:hover,html.theme--catppuccin-mocha .button.is-dark.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-hovered{background-color:#2c2d3d;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:focus,html.theme--catppuccin-mocha .content kbd.button:focus,html.theme--catppuccin-mocha .button.is-dark.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:focus:not(:active),html.theme--catppuccin-mocha .content kbd.button:focus:not(:active),html.theme--catppuccin-mocha .button.is-dark.is-focused:not(:active),html.theme--catppuccin-mocha .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .button.is-dark:active,html.theme--catppuccin-mocha .content kbd.button:active,html.theme--catppuccin-mocha .button.is-dark.is-active,html.theme--catppuccin-mocha .content kbd.button.is-active{background-color:#262735;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark[disabled],html.theme--catppuccin-mocha .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button{background-color:#313244;border-color:#313244;box-shadow:none}html.theme--catppuccin-mocha .button.is-dark.is-inverted,html.theme--catppuccin-mocha .content kbd.button.is-inverted{background-color:#fff;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted:hover,html.theme--catppuccin-mocha .content kbd.button.is-inverted:hover,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-dark.is-inverted[disabled],html.theme--catppuccin-mocha .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-loading::after,html.theme--catppuccin-mocha .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined,html.theme--catppuccin-mocha .content kbd.button.is-outlined{background-color:transparent;border-color:#313244;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-outlined:hover,html.theme--catppuccin-mocha .content kbd.button.is-outlined:hover,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-dark.is-outlined:focus,html.theme--catppuccin-mocha .content kbd.button.is-outlined:focus,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-focused{background-color:#313244;border-color:#313244;color:#fff}html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #313244 #313244 !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined[disabled],html.theme--catppuccin-mocha .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-outlined{background-color:transparent;border-color:#313244;box-shadow:none;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #313244 #313244 !important}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-primary,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:hover,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:focus,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:focus:not(:active),html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-mocha .button.is-primary.is-focused:not(:active),html.theme--catppuccin-mocha .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button.is-primary:active,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-mocha .button.is-primary.is-active,html.theme--catppuccin-mocha .docstring>section>a.button.is-active.docs-sourcelink{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink{background-color:#89b4fa;border-color:#89b4fa;box-shadow:none}html.theme--catppuccin-mocha .button.is-primary.is-inverted,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-primary.is-inverted[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-loading::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-outlined:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-mocha .button.is-primary.is-outlined:focus,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#89b4fa;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-light,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .button.is-primary.is-light:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-light.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#dfebfe;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-primary.is-light:active,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-mocha .button.is-primary.is-light.is-active,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d3e3fd;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-link{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:hover,html.theme--catppuccin-mocha .button.is-link.is-hovered{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:focus,html.theme--catppuccin-mocha .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:focus:not(:active),html.theme--catppuccin-mocha .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button.is-link:active,html.theme--catppuccin-mocha .button.is-link.is-active{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link{background-color:#89b4fa;border-color:#89b4fa;box-shadow:none}html.theme--catppuccin-mocha .button.is-link.is-inverted{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted:hover,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-link.is-outlined{background-color:transparent;border-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-outlined:hover,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-link.is-outlined:focus,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-focused{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-outlined{background-color:transparent;border-color:#89b4fa;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-light{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .button.is-link.is-light:hover,html.theme--catppuccin-mocha .button.is-link.is-light.is-hovered{background-color:#dfebfe;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-link.is-light:active,html.theme--catppuccin-mocha .button.is-link.is-light.is-active{background-color:#d3e3fd;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-info{background-color:#94e2d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:hover,html.theme--catppuccin-mocha .button.is-info.is-hovered{background-color:#8adfd1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:focus,html.theme--catppuccin-mocha .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:focus:not(:active),html.theme--catppuccin-mocha .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .button.is-info:active,html.theme--catppuccin-mocha .button.is-info.is-active{background-color:#80ddcd;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info{background-color:#94e2d5;border-color:#94e2d5;box-shadow:none}html.theme--catppuccin-mocha .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted:hover,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-info.is-outlined{background-color:transparent;border-color:#94e2d5;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-outlined:hover,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-info.is-outlined:focus,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-focused{background-color:#94e2d5;border-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #94e2d5 #94e2d5 !important}html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-outlined{background-color:transparent;border-color:#94e2d5;box-shadow:none;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #94e2d5 #94e2d5 !important}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-light{background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .button.is-info.is-light:hover,html.theme--catppuccin-mocha .button.is-info.is-light.is-hovered{background-color:#e5f8f5;border-color:transparent;color:#207466}html.theme--catppuccin-mocha .button.is-info.is-light:active,html.theme--catppuccin-mocha .button.is-info.is-light.is-active{background-color:#dbf5f1;border-color:transparent;color:#207466}html.theme--catppuccin-mocha .button.is-success{background-color:#a6e3a1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:hover,html.theme--catppuccin-mocha .button.is-success.is-hovered{background-color:#9de097;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:focus,html.theme--catppuccin-mocha .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:focus:not(:active),html.theme--catppuccin-mocha .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .button.is-success:active,html.theme--catppuccin-mocha .button.is-success.is-active{background-color:#93dd8d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success{background-color:#a6e3a1;border-color:#a6e3a1;box-shadow:none}html.theme--catppuccin-mocha .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted:hover,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-success.is-outlined{background-color:transparent;border-color:#a6e3a1;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-outlined:hover,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-success.is-outlined:focus,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-focused{background-color:#a6e3a1;border-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6e3a1 #a6e3a1 !important}html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-outlined{background-color:transparent;border-color:#a6e3a1;box-shadow:none;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6e3a1 #a6e3a1 !important}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-light{background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .button.is-success.is-light:hover,html.theme--catppuccin-mocha .button.is-success.is-light.is-hovered{background-color:#e7f7e5;border-color:transparent;color:#287222}html.theme--catppuccin-mocha .button.is-success.is-light:active,html.theme--catppuccin-mocha .button.is-success.is-light.is-active{background-color:#def4dc;border-color:transparent;color:#287222}html.theme--catppuccin-mocha .button.is-warning{background-color:#f9e2af;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:hover,html.theme--catppuccin-mocha .button.is-warning.is-hovered{background-color:#f8dea3;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:focus,html.theme--catppuccin-mocha .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:focus:not(:active),html.theme--catppuccin-mocha .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .button.is-warning:active,html.theme--catppuccin-mocha .button.is-warning.is-active{background-color:#f7d997;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning{background-color:#f9e2af;border-color:#f9e2af;box-shadow:none}html.theme--catppuccin-mocha .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted:hover,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined{background-color:transparent;border-color:#f9e2af;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-outlined:hover,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-warning.is-outlined:focus,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-focused{background-color:#f9e2af;border-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #f9e2af #f9e2af !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-outlined{background-color:transparent;border-color:#f9e2af;box-shadow:none;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f9e2af #f9e2af !important}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-light{background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .button.is-warning.is-light:hover,html.theme--catppuccin-mocha .button.is-warning.is-light.is-hovered{background-color:#fdf4e0;border-color:transparent;color:#8a620a}html.theme--catppuccin-mocha .button.is-warning.is-light:active,html.theme--catppuccin-mocha .button.is-warning.is-light.is-active{background-color:#fcf0d4;border-color:transparent;color:#8a620a}html.theme--catppuccin-mocha .button.is-danger{background-color:#f38ba8;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:hover,html.theme--catppuccin-mocha .button.is-danger.is-hovered{background-color:#f27f9f;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:focus,html.theme--catppuccin-mocha .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:focus:not(:active),html.theme--catppuccin-mocha .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .button.is-danger:active,html.theme--catppuccin-mocha .button.is-danger.is-active{background-color:#f17497;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger{background-color:#f38ba8;border-color:#f38ba8;box-shadow:none}html.theme--catppuccin-mocha .button.is-danger.is-inverted{background-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted:hover,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined{background-color:transparent;border-color:#f38ba8;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-outlined:hover,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-danger.is-outlined:focus,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-focused{background-color:#f38ba8;border-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f38ba8 #f38ba8 !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-outlined{background-color:transparent;border-color:#f38ba8;box-shadow:none;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f38ba8 #f38ba8 !important}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-light{background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .button.is-danger.is-light:hover,html.theme--catppuccin-mocha .button.is-danger.is-light.is-hovered{background-color:#fce1e8;border-color:transparent;color:#991036}html.theme--catppuccin-mocha .button.is-danger.is-light:active,html.theme--catppuccin-mocha .button.is-danger.is-light.is-active{background-color:#fbd5e0;border-color:transparent;color:#991036}html.theme--catppuccin-mocha .button.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-mocha .button.is-small:not(.is-rounded),html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-mocha .button.is-normal{font-size:1rem}html.theme--catppuccin-mocha .button.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .button.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button{background-color:#6c7086;border-color:#585b70;box-shadow:none;opacity:.5}html.theme--catppuccin-mocha .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-mocha .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-mocha .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-mocha .button.is-static{background-color:#181825;border-color:#585b70;color:#7f849c;box-shadow:none;pointer-events:none}html.theme--catppuccin-mocha .button.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-mocha .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-mocha .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-mocha .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-mocha .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-mocha .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-mocha .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-mocha .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-mocha .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-mocha .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-mocha .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-mocha .buttons.has-addons .button:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-mocha .buttons.has-addons .button:focus,html.theme--catppuccin-mocha .buttons.has-addons .button.is-focused,html.theme--catppuccin-mocha .buttons.has-addons .button:active,html.theme--catppuccin-mocha .buttons.has-addons .button.is-active,html.theme--catppuccin-mocha .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-mocha .buttons.has-addons .button:focus:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-mocha .buttons.has-addons .button:active:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-mocha .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .buttons.is-centered{justify-content:center}html.theme--catppuccin-mocha .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-mocha .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .button.is-responsive.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-mocha .button.is-responsive,html.theme--catppuccin-mocha .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-mocha .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-mocha .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .button.is-responsive.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-mocha .button.is-responsive,html.theme--catppuccin-mocha .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-mocha .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-mocha .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-mocha .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-mocha .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-mocha .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-mocha .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-mocha .content li+li{margin-top:0.25em}html.theme--catppuccin-mocha .content p:not(:last-child),html.theme--catppuccin-mocha .content dl:not(:last-child),html.theme--catppuccin-mocha .content ol:not(:last-child),html.theme--catppuccin-mocha .content ul:not(:last-child),html.theme--catppuccin-mocha .content blockquote:not(:last-child),html.theme--catppuccin-mocha .content pre:not(:last-child),html.theme--catppuccin-mocha .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-mocha .content h1,html.theme--catppuccin-mocha .content h2,html.theme--catppuccin-mocha .content h3,html.theme--catppuccin-mocha .content h4,html.theme--catppuccin-mocha .content h5,html.theme--catppuccin-mocha .content h6{color:#cdd6f4;font-weight:600;line-height:1.125}html.theme--catppuccin-mocha .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-mocha .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-mocha .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-mocha .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-mocha .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-mocha .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-mocha .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-mocha .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-mocha .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-mocha .content blockquote{background-color:#181825;border-left:5px solid #585b70;padding:1.25em 1.5em}html.theme--catppuccin-mocha .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-mocha .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-mocha .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-mocha .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-mocha .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-mocha .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-mocha .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-mocha .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-mocha .content ul ul ul{list-style-type:square}html.theme--catppuccin-mocha .content dd{margin-left:2em}html.theme--catppuccin-mocha .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-mocha .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-mocha .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-mocha .content figure img{display:inline-block}html.theme--catppuccin-mocha .content figure figcaption{font-style:italic}html.theme--catppuccin-mocha .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-mocha .content sup,html.theme--catppuccin-mocha .content sub{font-size:75%}html.theme--catppuccin-mocha .content table{width:100%}html.theme--catppuccin-mocha .content table td,html.theme--catppuccin-mocha .content table th{border:1px solid #585b70;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-mocha .content table th{color:#b8c5ef}html.theme--catppuccin-mocha .content table th:not([align]){text-align:inherit}html.theme--catppuccin-mocha .content table thead td,html.theme--catppuccin-mocha .content table thead th{border-width:0 0 2px;color:#b8c5ef}html.theme--catppuccin-mocha .content table tfoot td,html.theme--catppuccin-mocha .content table tfoot th{border-width:2px 0 0;color:#b8c5ef}html.theme--catppuccin-mocha .content table tbody tr:last-child td,html.theme--catppuccin-mocha .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-mocha .content .tabs li+li{margin-top:0}html.theme--catppuccin-mocha .content.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-mocha .content.is-normal{font-size:1rem}html.theme--catppuccin-mocha .content.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .content.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-mocha .icon.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-mocha .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-mocha .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-mocha .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-mocha .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-mocha .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-mocha div.icon-text{display:flex}html.theme--catppuccin-mocha .image,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-mocha .image img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-mocha .image img.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-mocha .image.is-fullwidth,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-mocha .image.is-square img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-mocha .image.is-square .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-mocha .image.is-1by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-mocha .image.is-1by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-mocha .image.is-5by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-mocha .image.is-5by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-mocha .image.is-4by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-mocha .image.is-4by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-mocha .image.is-3by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-mocha .image.is-5by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-mocha .image.is-5by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-mocha .image.is-16by9 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-mocha .image.is-16by9 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-mocha .image.is-2by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-mocha .image.is-2by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-mocha .image.is-3by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-mocha .image.is-3by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-mocha .image.is-4by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-mocha .image.is-4by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-mocha .image.is-3by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-mocha .image.is-3by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-mocha .image.is-2by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-mocha .image.is-2by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-mocha .image.is-3by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-mocha .image.is-9by16 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-mocha .image.is-9by16 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-mocha .image.is-1by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-mocha .image.is-1by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-mocha .image.is-1by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-mocha .image.is-1by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-mocha .image.is-square,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-mocha .image.is-1by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-mocha .image.is-5by4,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-mocha .image.is-4by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-mocha .image.is-3by2,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-mocha .image.is-5by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-mocha .image.is-16by9,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-mocha .image.is-2by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-mocha .image.is-3by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-mocha .image.is-4by5,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-mocha .image.is-3by4,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-mocha .image.is-2by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-mocha .image.is-3by5,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-mocha .image.is-9by16,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-mocha .image.is-1by2,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-mocha .image.is-1by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-mocha .image.is-16x16,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-mocha .image.is-24x24,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-mocha .image.is-32x32,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-mocha .image.is-48x48,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-mocha .image.is-64x64,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-mocha .image.is-96x96,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-mocha .image.is-128x128,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-mocha .notification{background-color:#181825;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-mocha .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-mocha .notification strong{color:currentColor}html.theme--catppuccin-mocha .notification code,html.theme--catppuccin-mocha .notification pre{background:#fff}html.theme--catppuccin-mocha .notification pre code{background:transparent}html.theme--catppuccin-mocha .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-mocha .notification .title,html.theme--catppuccin-mocha .notification .subtitle,html.theme--catppuccin-mocha .notification .content{color:currentColor}html.theme--catppuccin-mocha .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-dark,html.theme--catppuccin-mocha .content kbd.notification{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .notification.is-primary,html.theme--catppuccin-mocha .docstring>section>a.notification.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .notification.is-primary.is-light,html.theme--catppuccin-mocha .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .notification.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .notification.is-link.is-light{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .notification.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-info.is-light{background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .notification.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-success.is-light{background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .notification.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-warning.is-light{background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .notification.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .notification.is-danger.is-light{background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-mocha .progress::-webkit-progress-bar{background-color:#45475a}html.theme--catppuccin-mocha .progress::-webkit-progress-value{background-color:#7f849c}html.theme--catppuccin-mocha .progress::-moz-progress-bar{background-color:#7f849c}html.theme--catppuccin-mocha .progress::-ms-fill{background-color:#7f849c;border:none}html.theme--catppuccin-mocha .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-mocha .content kbd.progress::-webkit-progress-value{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-mocha .content kbd.progress::-moz-progress-bar{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark::-ms-fill,html.theme--catppuccin-mocha .content kbd.progress::-ms-fill{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark:indeterminate,html.theme--catppuccin-mocha .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #313244 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary::-ms-fill,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary:indeterminate,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #89b4fa 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-link::-webkit-progress-value{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link::-moz-progress-bar{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link::-ms-fill{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link:indeterminate{background-image:linear-gradient(to right, #89b4fa 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-info::-webkit-progress-value{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info::-moz-progress-bar{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info::-ms-fill{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info:indeterminate{background-image:linear-gradient(to right, #94e2d5 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-success::-webkit-progress-value{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success::-moz-progress-bar{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success::-ms-fill{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6e3a1 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-warning::-webkit-progress-value{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning::-moz-progress-bar{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning::-ms-fill{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #f9e2af 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-danger::-webkit-progress-value{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger::-moz-progress-bar{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger::-ms-fill{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #f38ba8 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#45475a;background-image:linear-gradient(to right, #cdd6f4 30%, #45475a 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-mocha .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-mocha .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-mocha .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-mocha .progress.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-mocha .progress.is-medium{height:1.25rem}html.theme--catppuccin-mocha .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-mocha .table{background-color:#45475a;color:#cdd6f4}html.theme--catppuccin-mocha .table td,html.theme--catppuccin-mocha .table th{border:1px solid #585b70;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-mocha .table td.is-white,html.theme--catppuccin-mocha .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .table td.is-black,html.theme--catppuccin-mocha .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .table td.is-light,html.theme--catppuccin-mocha .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-dark,html.theme--catppuccin-mocha .table th.is-dark{background-color:#313244;border-color:#313244;color:#fff}html.theme--catppuccin-mocha .table td.is-primary,html.theme--catppuccin-mocha .table th.is-primary{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-link,html.theme--catppuccin-mocha .table th.is-link{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-info,html.theme--catppuccin-mocha .table th.is-info{background-color:#94e2d5;border-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-success,html.theme--catppuccin-mocha .table th.is-success{background-color:#a6e3a1;border-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-warning,html.theme--catppuccin-mocha .table th.is-warning{background-color:#f9e2af;border-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-danger,html.theme--catppuccin-mocha .table th.is-danger{background-color:#f38ba8;border-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .table td.is-narrow,html.theme--catppuccin-mocha .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-mocha .table td.is-selected,html.theme--catppuccin-mocha .table th.is-selected{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-selected a,html.theme--catppuccin-mocha .table td.is-selected strong,html.theme--catppuccin-mocha .table th.is-selected a,html.theme--catppuccin-mocha .table th.is-selected strong{color:currentColor}html.theme--catppuccin-mocha .table td.is-vcentered,html.theme--catppuccin-mocha .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-mocha .table th{color:#b8c5ef}html.theme--catppuccin-mocha .table th:not([align]){text-align:left}html.theme--catppuccin-mocha .table tr.is-selected{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table tr.is-selected a,html.theme--catppuccin-mocha .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-mocha .table tr.is-selected td,html.theme--catppuccin-mocha .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-mocha .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table thead td,html.theme--catppuccin-mocha .table thead th{border-width:0 0 2px;color:#b8c5ef}html.theme--catppuccin-mocha .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table tfoot td,html.theme--catppuccin-mocha .table tfoot th{border-width:2px 0 0;color:#b8c5ef}html.theme--catppuccin-mocha .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table tbody tr:last-child td,html.theme--catppuccin-mocha .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-mocha .table.is-bordered td,html.theme--catppuccin-mocha .table.is-bordered th{border-width:1px}html.theme--catppuccin-mocha .table.is-bordered tr:last-child td,html.theme--catppuccin-mocha .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-mocha .table.is-fullwidth{width:100%}html.theme--catppuccin-mocha .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#313244}html.theme--catppuccin-mocha .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#313244}html.theme--catppuccin-mocha .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#35364a}html.theme--catppuccin-mocha .table.is-narrow td,html.theme--catppuccin-mocha .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-mocha .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#313244}html.theme--catppuccin-mocha .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-mocha .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .tags .tag,html.theme--catppuccin-mocha .tags .content kbd,html.theme--catppuccin-mocha .content .tags kbd,html.theme--catppuccin-mocha .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-mocha .tags .tag:not(:last-child),html.theme--catppuccin-mocha .tags .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags kbd:not(:last-child),html.theme--catppuccin-mocha .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-mocha .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-mocha .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-mocha .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-mocha .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-mocha .tags.is-centered{justify-content:center}html.theme--catppuccin-mocha .tags.is-centered .tag,html.theme--catppuccin-mocha .tags.is-centered .content kbd,html.theme--catppuccin-mocha .content .tags.is-centered kbd,html.theme--catppuccin-mocha .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-mocha .tags.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .tags.is-right .tag:not(:first-child),html.theme--catppuccin-mocha .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-mocha .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-mocha .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-mocha .tags.is-right .tag:not(:last-child),html.theme--catppuccin-mocha .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-mocha .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-mocha .tags.has-addons .tag,html.theme--catppuccin-mocha .tags.has-addons .content kbd,html.theme--catppuccin-mocha .content .tags.has-addons kbd,html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-mocha .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-mocha .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-mocha .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-mocha .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-mocha .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-mocha .tag:not(body),html.theme--catppuccin-mocha .content kbd:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#181825;border-radius:.4em;color:#cdd6f4;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-mocha .tag:not(body) .delete,html.theme--catppuccin-mocha .content kbd:not(body) .delete,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-mocha .tag.is-white:not(body),html.theme--catppuccin-mocha .content kbd.is-white:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .tag.is-black:not(body),html.theme--catppuccin-mocha .content kbd.is-black:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .tag.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-dark:not(body),html.theme--catppuccin-mocha .content kbd:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-mocha .content .docstring>section>kbd:not(body){background-color:#313244;color:#fff}html.theme--catppuccin-mocha .tag.is-primary:not(body),html.theme--catppuccin-mocha .content kbd.is-primary:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .tag.is-primary.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .tag.is-link:not(body),html.theme--catppuccin-mocha .content kbd.is-link:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .tag.is-link.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-link.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .tag.is-info:not(body),html.theme--catppuccin-mocha .content kbd.is-info:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-info.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-info.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .tag.is-success:not(body),html.theme--catppuccin-mocha .content kbd.is-success:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-success.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-success.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .tag.is-warning:not(body),html.theme--catppuccin-mocha .content kbd.is-warning:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-warning.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .tag.is-danger:not(body),html.theme--catppuccin-mocha .content kbd.is-danger:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .tag.is-danger.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .tag.is-normal:not(body),html.theme--catppuccin-mocha .content kbd.is-normal:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-mocha .tag.is-medium:not(body),html.theme--catppuccin-mocha .content kbd.is-medium:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-mocha .tag.is-large:not(body),html.theme--catppuccin-mocha .content kbd.is-large:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-mocha .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-mocha .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-mocha .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-mocha .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-mocha .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-mocha .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-mocha .tag.is-delete:not(body),html.theme--catppuccin-mocha .content kbd.is-delete:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-mocha .tag.is-delete:not(body)::before,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::before,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-mocha .tag.is-delete:not(body)::after,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::after,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-mocha .tag.is-delete:not(body)::before,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::before,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-mocha .tag.is-delete:not(body)::after,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::after,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-mocha .tag.is-delete:not(body):hover,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):hover,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-mocha .tag.is-delete:not(body):focus,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):focus,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#0e0e16}html.theme--catppuccin-mocha .tag.is-delete:not(body):active,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):active,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#040406}html.theme--catppuccin-mocha .tag.is-rounded:not(body),html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-mocha .content kbd.is-rounded:not(body),html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-mocha a.tag:hover,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-mocha .title,html.theme--catppuccin-mocha .subtitle{word-break:break-word}html.theme--catppuccin-mocha .title em,html.theme--catppuccin-mocha .title span,html.theme--catppuccin-mocha .subtitle em,html.theme--catppuccin-mocha .subtitle span{font-weight:inherit}html.theme--catppuccin-mocha .title sub,html.theme--catppuccin-mocha .subtitle sub{font-size:.75em}html.theme--catppuccin-mocha .title sup,html.theme--catppuccin-mocha .subtitle sup{font-size:.75em}html.theme--catppuccin-mocha .title .tag,html.theme--catppuccin-mocha .title .content kbd,html.theme--catppuccin-mocha .content .title kbd,html.theme--catppuccin-mocha .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-mocha .subtitle .tag,html.theme--catppuccin-mocha .subtitle .content kbd,html.theme--catppuccin-mocha .content .subtitle kbd,html.theme--catppuccin-mocha .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-mocha .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-mocha .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-mocha .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-mocha .title.is-1{font-size:3rem}html.theme--catppuccin-mocha .title.is-2{font-size:2.5rem}html.theme--catppuccin-mocha .title.is-3{font-size:2rem}html.theme--catppuccin-mocha .title.is-4{font-size:1.5rem}html.theme--catppuccin-mocha .title.is-5{font-size:1.25rem}html.theme--catppuccin-mocha .title.is-6{font-size:1rem}html.theme--catppuccin-mocha .title.is-7{font-size:.75rem}html.theme--catppuccin-mocha .subtitle{color:#6c7086;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-mocha .subtitle strong{color:#6c7086;font-weight:600}html.theme--catppuccin-mocha .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-mocha .subtitle.is-1{font-size:3rem}html.theme--catppuccin-mocha .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-mocha .subtitle.is-3{font-size:2rem}html.theme--catppuccin-mocha .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-mocha .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-mocha .subtitle.is-6{font-size:1rem}html.theme--catppuccin-mocha .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-mocha .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-mocha .number{align-items:center;background-color:#181825;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{background-color:#1e1e2e;border-color:#585b70;border-radius:.4em;color:#7f849c}html.theme--catppuccin-mocha .select select::-moz-placeholder,html.theme--catppuccin-mocha .textarea::-moz-placeholder,html.theme--catppuccin-mocha .input::-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select::-webkit-input-placeholder,html.theme--catppuccin-mocha .textarea::-webkit-input-placeholder,html.theme--catppuccin-mocha .input::-webkit-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:-moz-placeholder,html.theme--catppuccin-mocha .textarea:-moz-placeholder,html.theme--catppuccin-mocha .input:-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:-ms-input-placeholder,html.theme--catppuccin-mocha .textarea:-ms-input-placeholder,html.theme--catppuccin-mocha .input:-ms-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:hover,html.theme--catppuccin-mocha .textarea:hover,html.theme--catppuccin-mocha .input:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-mocha .select select.is-hovered,html.theme--catppuccin-mocha .is-hovered.textarea,html.theme--catppuccin-mocha .is-hovered.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#6c7086}html.theme--catppuccin-mocha .select select:focus,html.theme--catppuccin-mocha .textarea:focus,html.theme--catppuccin-mocha .input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-mocha .select select.is-focused,html.theme--catppuccin-mocha .is-focused.textarea,html.theme--catppuccin-mocha .is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .select select:active,html.theme--catppuccin-mocha .textarea:active,html.theme--catppuccin-mocha .input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-mocha .select select.is-active,html.theme--catppuccin-mocha .is-active.textarea,html.theme--catppuccin-mocha .is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#89b4fa;box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select select[disabled],html.theme--catppuccin-mocha .textarea[disabled],html.theme--catppuccin-mocha .input[disabled],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-mocha .select select,fieldset[disabled] html.theme--catppuccin-mocha .textarea,fieldset[disabled] html.theme--catppuccin-mocha .input,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{background-color:#6c7086;border-color:#181825;box-shadow:none;color:#f7f8fd}html.theme--catppuccin-mocha .select select[disabled]::-moz-placeholder,html.theme--catppuccin-mocha .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-mocha .input[disabled]::-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]:-moz-placeholder,html.theme--catppuccin-mocha .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-mocha .input[disabled]:-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-mocha .textarea[readonly],html.theme--catppuccin-mocha .input[readonly],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-mocha .is-white.textarea,html.theme--catppuccin-mocha .is-white.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-mocha .is-white.textarea:focus,html.theme--catppuccin-mocha .is-white.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-mocha .is-white.is-focused.textarea,html.theme--catppuccin-mocha .is-white.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-white.textarea:active,html.theme--catppuccin-mocha .is-white.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-mocha .is-white.is-active.textarea,html.theme--catppuccin-mocha .is-white.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .is-black.textarea,html.theme--catppuccin-mocha .is-black.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-mocha .is-black.textarea:focus,html.theme--catppuccin-mocha .is-black.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-mocha .is-black.is-focused.textarea,html.theme--catppuccin-mocha .is-black.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-black.textarea:active,html.theme--catppuccin-mocha .is-black.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-mocha .is-black.is-active.textarea,html.theme--catppuccin-mocha .is-black.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .is-light.textarea,html.theme--catppuccin-mocha .is-light.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-mocha .is-light.textarea:focus,html.theme--catppuccin-mocha .is-light.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-mocha .is-light.is-focused.textarea,html.theme--catppuccin-mocha .is-light.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-light.textarea:active,html.theme--catppuccin-mocha .is-light.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-mocha .is-light.is-active.textarea,html.theme--catppuccin-mocha .is-light.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .is-dark.textarea,html.theme--catppuccin-mocha .content kbd.textarea,html.theme--catppuccin-mocha .is-dark.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-mocha .content kbd.input{border-color:#313244}html.theme--catppuccin-mocha .is-dark.textarea:focus,html.theme--catppuccin-mocha .content kbd.textarea:focus,html.theme--catppuccin-mocha .is-dark.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-mocha .content kbd.input:focus,html.theme--catppuccin-mocha .is-dark.is-focused.textarea,html.theme--catppuccin-mocha .content kbd.is-focused.textarea,html.theme--catppuccin-mocha .is-dark.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .content kbd.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-dark.textarea:active,html.theme--catppuccin-mocha .content kbd.textarea:active,html.theme--catppuccin-mocha .is-dark.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-mocha .content kbd.input:active,html.theme--catppuccin-mocha .is-dark.is-active.textarea,html.theme--catppuccin-mocha .content kbd.is-active.textarea,html.theme--catppuccin-mocha .is-dark.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .content kbd.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .is-primary.textarea,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink{border-color:#89b4fa}html.theme--catppuccin-mocha .is-primary.textarea:focus,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-mocha .is-primary.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-mocha .is-primary.is-focused.textarea,html.theme--catppuccin-mocha .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.textarea:active,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-mocha .is-primary.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-mocha .is-primary.is-active.textarea,html.theme--catppuccin-mocha .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .is-link.textarea,html.theme--catppuccin-mocha .is-link.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#89b4fa}html.theme--catppuccin-mocha .is-link.textarea:focus,html.theme--catppuccin-mocha .is-link.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-mocha .is-link.is-focused.textarea,html.theme--catppuccin-mocha .is-link.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-link.textarea:active,html.theme--catppuccin-mocha .is-link.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-mocha .is-link.is-active.textarea,html.theme--catppuccin-mocha .is-link.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .is-info.textarea,html.theme--catppuccin-mocha .is-info.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#94e2d5}html.theme--catppuccin-mocha .is-info.textarea:focus,html.theme--catppuccin-mocha .is-info.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-mocha .is-info.is-focused.textarea,html.theme--catppuccin-mocha .is-info.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-info.textarea:active,html.theme--catppuccin-mocha .is-info.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-mocha .is-info.is-active.textarea,html.theme--catppuccin-mocha .is-info.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .is-success.textarea,html.theme--catppuccin-mocha .is-success.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6e3a1}html.theme--catppuccin-mocha .is-success.textarea:focus,html.theme--catppuccin-mocha .is-success.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-mocha .is-success.is-focused.textarea,html.theme--catppuccin-mocha .is-success.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-success.textarea:active,html.theme--catppuccin-mocha .is-success.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-mocha .is-success.is-active.textarea,html.theme--catppuccin-mocha .is-success.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .is-warning.textarea,html.theme--catppuccin-mocha .is-warning.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#f9e2af}html.theme--catppuccin-mocha .is-warning.textarea:focus,html.theme--catppuccin-mocha .is-warning.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-mocha .is-warning.is-focused.textarea,html.theme--catppuccin-mocha .is-warning.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-warning.textarea:active,html.theme--catppuccin-mocha .is-warning.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-mocha .is-warning.is-active.textarea,html.theme--catppuccin-mocha .is-warning.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .is-danger.textarea,html.theme--catppuccin-mocha .is-danger.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#f38ba8}html.theme--catppuccin-mocha .is-danger.textarea:focus,html.theme--catppuccin-mocha .is-danger.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-mocha .is-danger.is-focused.textarea,html.theme--catppuccin-mocha .is-danger.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-danger.textarea:active,html.theme--catppuccin-mocha .is-danger.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-mocha .is-danger.is-active.textarea,html.theme--catppuccin-mocha .is-danger.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .is-small.textarea,html.theme--catppuccin-mocha .is-small.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-mocha .is-medium.textarea,html.theme--catppuccin-mocha .is-medium.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .is-large.textarea,html.theme--catppuccin-mocha .is-large.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .is-fullwidth.textarea,html.theme--catppuccin-mocha .is-fullwidth.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-mocha .is-inline.textarea,html.theme--catppuccin-mocha .is-inline.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-mocha .input.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-mocha .input.is-static,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-mocha .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-mocha .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-mocha .textarea[rows]{height:initial}html.theme--catppuccin-mocha .textarea.has-fixed-size{resize:none}html.theme--catppuccin-mocha .radio,html.theme--catppuccin-mocha .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-mocha .radio input,html.theme--catppuccin-mocha .checkbox input{cursor:pointer}html.theme--catppuccin-mocha .radio:hover,html.theme--catppuccin-mocha .checkbox:hover{color:#89dceb}html.theme--catppuccin-mocha .radio[disabled],html.theme--catppuccin-mocha .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-mocha .radio,fieldset[disabled] html.theme--catppuccin-mocha .checkbox,html.theme--catppuccin-mocha .radio input[disabled],html.theme--catppuccin-mocha .checkbox input[disabled]{color:#f7f8fd;cursor:not-allowed}html.theme--catppuccin-mocha .radio+.radio{margin-left:.5em}html.theme--catppuccin-mocha .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-mocha .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading)::after{border-color:#89b4fa;right:1.125em;z-index:4}html.theme--catppuccin-mocha .select.is-rounded select,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-mocha .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-mocha .select select::-ms-expand{display:none}html.theme--catppuccin-mocha .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-mocha .select select:hover{border-color:#181825}html.theme--catppuccin-mocha .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-mocha .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-mocha .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#89dceb}html.theme--catppuccin-mocha .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-mocha .select.is-white select{border-color:#fff}html.theme--catppuccin-mocha .select.is-white select:hover,html.theme--catppuccin-mocha .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-mocha .select.is-white select:focus,html.theme--catppuccin-mocha .select.is-white select.is-focused,html.theme--catppuccin-mocha .select.is-white select:active,html.theme--catppuccin-mocha .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-mocha .select.is-black select:hover,html.theme--catppuccin-mocha .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-mocha .select.is-black select:focus,html.theme--catppuccin-mocha .select.is-black select.is-focused,html.theme--catppuccin-mocha .select.is-black select:active,html.theme--catppuccin-mocha .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-mocha .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-mocha .select.is-light select:hover,html.theme--catppuccin-mocha .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-mocha .select.is-light select:focus,html.theme--catppuccin-mocha .select.is-light select.is-focused,html.theme--catppuccin-mocha .select.is-light select:active,html.theme--catppuccin-mocha .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .select.is-dark:not(:hover)::after,html.theme--catppuccin-mocha .content kbd.select:not(:hover)::after{border-color:#313244}html.theme--catppuccin-mocha .select.is-dark select,html.theme--catppuccin-mocha .content kbd.select select{border-color:#313244}html.theme--catppuccin-mocha .select.is-dark select:hover,html.theme--catppuccin-mocha .content kbd.select select:hover,html.theme--catppuccin-mocha .select.is-dark select.is-hovered,html.theme--catppuccin-mocha .content kbd.select select.is-hovered{border-color:#262735}html.theme--catppuccin-mocha .select.is-dark select:focus,html.theme--catppuccin-mocha .content kbd.select select:focus,html.theme--catppuccin-mocha .select.is-dark select.is-focused,html.theme--catppuccin-mocha .content kbd.select select.is-focused,html.theme--catppuccin-mocha .select.is-dark select:active,html.theme--catppuccin-mocha .content kbd.select select:active,html.theme--catppuccin-mocha .select.is-dark select.is-active,html.theme--catppuccin-mocha .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .select.is-primary:not(:hover)::after,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-primary select,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-primary select:hover,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-mocha .select.is-primary select.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#71a4f9}html.theme--catppuccin-mocha .select.is-primary select:focus,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-mocha .select.is-primary select.is-focused,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-mocha .select.is-primary select:active,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-mocha .select.is-primary select.is-active,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select.is-link:not(:hover)::after{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-link select{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-link select:hover,html.theme--catppuccin-mocha .select.is-link select.is-hovered{border-color:#71a4f9}html.theme--catppuccin-mocha .select.is-link select:focus,html.theme--catppuccin-mocha .select.is-link select.is-focused,html.theme--catppuccin-mocha .select.is-link select:active,html.theme--catppuccin-mocha .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select.is-info:not(:hover)::after{border-color:#94e2d5}html.theme--catppuccin-mocha .select.is-info select{border-color:#94e2d5}html.theme--catppuccin-mocha .select.is-info select:hover,html.theme--catppuccin-mocha .select.is-info select.is-hovered{border-color:#80ddcd}html.theme--catppuccin-mocha .select.is-info select:focus,html.theme--catppuccin-mocha .select.is-info select.is-focused,html.theme--catppuccin-mocha .select.is-info select:active,html.theme--catppuccin-mocha .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .select.is-success:not(:hover)::after{border-color:#a6e3a1}html.theme--catppuccin-mocha .select.is-success select{border-color:#a6e3a1}html.theme--catppuccin-mocha .select.is-success select:hover,html.theme--catppuccin-mocha .select.is-success select.is-hovered{border-color:#93dd8d}html.theme--catppuccin-mocha .select.is-success select:focus,html.theme--catppuccin-mocha .select.is-success select.is-focused,html.theme--catppuccin-mocha .select.is-success select:active,html.theme--catppuccin-mocha .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .select.is-warning:not(:hover)::after{border-color:#f9e2af}html.theme--catppuccin-mocha .select.is-warning select{border-color:#f9e2af}html.theme--catppuccin-mocha .select.is-warning select:hover,html.theme--catppuccin-mocha .select.is-warning select.is-hovered{border-color:#f7d997}html.theme--catppuccin-mocha .select.is-warning select:focus,html.theme--catppuccin-mocha .select.is-warning select.is-focused,html.theme--catppuccin-mocha .select.is-warning select:active,html.theme--catppuccin-mocha .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .select.is-danger:not(:hover)::after{border-color:#f38ba8}html.theme--catppuccin-mocha .select.is-danger select{border-color:#f38ba8}html.theme--catppuccin-mocha .select.is-danger select:hover,html.theme--catppuccin-mocha .select.is-danger select.is-hovered{border-color:#f17497}html.theme--catppuccin-mocha .select.is-danger select:focus,html.theme--catppuccin-mocha .select.is-danger select.is-focused,html.theme--catppuccin-mocha .select.is-danger select:active,html.theme--catppuccin-mocha .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .select.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-mocha .select.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .select.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .select.is-disabled::after{border-color:#f7f8fd !important;opacity:0.5}html.theme--catppuccin-mocha .select.is-fullwidth{width:100%}html.theme--catppuccin-mocha .select.is-fullwidth select{width:100%}html.theme--catppuccin-mocha .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-mocha .select.is-loading.is-small:after,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-mocha .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-mocha .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-mocha .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-mocha .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:hover .file-cta,html.theme--catppuccin-mocha .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:focus .file-cta,html.theme--catppuccin-mocha .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:active .file-cta,html.theme--catppuccin-mocha .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-black:hover .file-cta,html.theme--catppuccin-mocha .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-black:focus .file-cta,html.theme--catppuccin-mocha .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-black:active .file-cta,html.theme--catppuccin-mocha .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:hover .file-cta,html.theme--catppuccin-mocha .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:focus .file-cta,html.theme--catppuccin-mocha .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:active .file-cta,html.theme--catppuccin-mocha .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-dark .file-cta,html.theme--catppuccin-mocha .content kbd.file .file-cta{background-color:#313244;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-dark:hover .file-cta,html.theme--catppuccin-mocha .content kbd.file:hover .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-hovered .file-cta{background-color:#2c2d3d;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-dark:focus .file-cta,html.theme--catppuccin-mocha .content kbd.file:focus .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-focused .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(49,50,68,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-dark:active .file-cta,html.theme--catppuccin-mocha .content kbd.file:active .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-active .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-active .file-cta{background-color:#262735;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary:hover .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary:focus .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-focused .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(137,180,250,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-primary:active .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-active .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link .file-cta{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link:hover .file-cta,html.theme--catppuccin-mocha .file.is-link.is-hovered .file-cta{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link:focus .file-cta,html.theme--catppuccin-mocha .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(137,180,250,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-link:active .file-cta,html.theme--catppuccin-mocha .file.is-link.is-active .file-cta{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-info .file-cta{background-color:#94e2d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:hover .file-cta,html.theme--catppuccin-mocha .file.is-info.is-hovered .file-cta{background-color:#8adfd1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:focus .file-cta,html.theme--catppuccin-mocha .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(148,226,213,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:active .file-cta,html.theme--catppuccin-mocha .file.is-info.is-active .file-cta{background-color:#80ddcd;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success .file-cta{background-color:#a6e3a1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:hover .file-cta,html.theme--catppuccin-mocha .file.is-success.is-hovered .file-cta{background-color:#9de097;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:focus .file-cta,html.theme--catppuccin-mocha .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,227,161,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:active .file-cta,html.theme--catppuccin-mocha .file.is-success.is-active .file-cta{background-color:#93dd8d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning .file-cta{background-color:#f9e2af;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:hover .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-hovered .file-cta{background-color:#f8dea3;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:focus .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(249,226,175,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:active .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-active .file-cta{background-color:#f7d997;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-danger .file-cta{background-color:#f38ba8;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-danger:hover .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-hovered .file-cta{background-color:#f27f9f;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-danger:focus .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(243,139,168,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-danger:active .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-active .file-cta{background-color:#f17497;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-mocha .file.is-normal{font-size:1rem}html.theme--catppuccin-mocha .file.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-mocha .file.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-mocha .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-mocha .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-mocha .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-mocha .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-mocha .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-mocha .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-mocha .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-mocha .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-mocha .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-mocha .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-mocha .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-mocha .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-mocha .file.is-centered{justify-content:center}html.theme--catppuccin-mocha .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-mocha .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-mocha .file.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-mocha .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-mocha .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-mocha .file-label:hover .file-cta{background-color:#2c2d3d;color:#b8c5ef}html.theme--catppuccin-mocha .file-label:hover .file-name{border-color:#525569}html.theme--catppuccin-mocha .file-label:active .file-cta{background-color:#262735;color:#b8c5ef}html.theme--catppuccin-mocha .file-label:active .file-name{border-color:#4d4f62}html.theme--catppuccin-mocha .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha .file-name{border-color:#585b70;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-mocha .file-cta{background-color:#313244;color:#cdd6f4}html.theme--catppuccin-mocha .file-name{border-color:#585b70;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-mocha .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-mocha .file-icon .fa{font-size:14px}html.theme--catppuccin-mocha .label{color:#b8c5ef;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-mocha .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-mocha .label.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-mocha .label.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .label.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-mocha .help.is-white{color:#fff}html.theme--catppuccin-mocha .help.is-black{color:#0a0a0a}html.theme--catppuccin-mocha .help.is-light{color:#f5f5f5}html.theme--catppuccin-mocha .help.is-dark,html.theme--catppuccin-mocha .content kbd.help{color:#313244}html.theme--catppuccin-mocha .help.is-primary,html.theme--catppuccin-mocha .docstring>section>a.help.docs-sourcelink{color:#89b4fa}html.theme--catppuccin-mocha .help.is-link{color:#89b4fa}html.theme--catppuccin-mocha .help.is-info{color:#94e2d5}html.theme--catppuccin-mocha .help.is-success{color:#a6e3a1}html.theme--catppuccin-mocha .help.is-warning{color:#f9e2af}html.theme--catppuccin-mocha .help.is-danger{color:#f38ba8}html.theme--catppuccin-mocha .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-mocha .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-mocha .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-mocha .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-mocha .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-mocha .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-mocha .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-mocha .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-mocha .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field.is-horizontal{display:flex}}html.theme--catppuccin-mocha .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-mocha .field-label.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-mocha .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-mocha .field-body .field{margin-bottom:0}html.theme--catppuccin-mocha .field-body>.field{flex-shrink:1}html.theme--catppuccin-mocha .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-mocha .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-mocha .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-mocha .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select:focus~.icon{color:#313244}html.theme--catppuccin-mocha .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-mocha .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-mocha .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-mocha .control.has-icons-left .icon,html.theme--catppuccin-mocha .control.has-icons-right .icon{color:#585b70;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-mocha .control.has-icons-left .input,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-mocha .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-mocha .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-mocha .control.has-icons-right .input,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-mocha .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-mocha .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-mocha .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-mocha .control.is-loading.is-small:after,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-mocha .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-mocha .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-mocha .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-mocha .breadcrumb a{align-items:center;color:#89b4fa;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-mocha .breadcrumb a:hover{color:#89dceb}html.theme--catppuccin-mocha .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-mocha .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-mocha .breadcrumb li.is-active a{color:#b8c5ef;cursor:default;pointer-events:none}html.theme--catppuccin-mocha .breadcrumb li+li::before{color:#6c7086;content:"\0002f"}html.theme--catppuccin-mocha .breadcrumb ul,html.theme--catppuccin-mocha .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-mocha .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-mocha .breadcrumb.is-centered ol,html.theme--catppuccin-mocha .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-mocha .breadcrumb.is-right ol,html.theme--catppuccin-mocha .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-mocha .breadcrumb.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-mocha .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-mocha .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-mocha .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-mocha .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-mocha .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#cdd6f4;max-width:100%;position:relative}html.theme--catppuccin-mocha .card-footer:first-child,html.theme--catppuccin-mocha .card-content:first-child,html.theme--catppuccin-mocha .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-mocha .card-footer:last-child,html.theme--catppuccin-mocha .card-content:last-child,html.theme--catppuccin-mocha .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-mocha .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-mocha .card-header-title{align-items:center;color:#b8c5ef;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-mocha .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-mocha .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-mocha .card-image{display:block;position:relative}html.theme--catppuccin-mocha .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-mocha .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-mocha .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-mocha .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-mocha .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-mocha .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-mocha .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-mocha .dropdown.is-active .dropdown-menu,html.theme--catppuccin-mocha .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-mocha .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-mocha .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-mocha .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-mocha .dropdown-content{background-color:#181825;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-mocha .dropdown-item{color:#cdd6f4;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-mocha a.dropdown-item,html.theme--catppuccin-mocha button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-mocha a.dropdown-item:hover,html.theme--catppuccin-mocha button.dropdown-item:hover{background-color:#181825;color:#0a0a0a}html.theme--catppuccin-mocha a.dropdown-item.is-active,html.theme--catppuccin-mocha button.dropdown-item.is-active{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-mocha .level{align-items:center;justify-content:space-between}html.theme--catppuccin-mocha .level code{border-radius:.4em}html.theme--catppuccin-mocha .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-mocha .level.is-mobile{display:flex}html.theme--catppuccin-mocha .level.is-mobile .level-left,html.theme--catppuccin-mocha .level.is-mobile .level-right{display:flex}html.theme--catppuccin-mocha .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-mocha .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-mocha .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level{display:flex}html.theme--catppuccin-mocha .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-mocha .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-mocha .level-item .title,html.theme--catppuccin-mocha .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-mocha .level-left,html.theme--catppuccin-mocha .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .level-left .level-item.is-flexible,html.theme--catppuccin-mocha .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-left .level-item:not(:last-child),html.theme--catppuccin-mocha .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-mocha .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-left{display:flex}}html.theme--catppuccin-mocha .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-right{display:flex}}html.theme--catppuccin-mocha .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-mocha .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-mocha .media .media{border-top:1px solid rgba(88,91,112,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-mocha .media .media .content:not(:last-child),html.theme--catppuccin-mocha .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-mocha .media .media .media{padding-top:.5rem}html.theme--catppuccin-mocha .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-mocha .media+.media{border-top:1px solid rgba(88,91,112,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-mocha .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-mocha .media-left,html.theme--catppuccin-mocha .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .media-left{margin-right:1rem}html.theme--catppuccin-mocha .media-right{margin-left:1rem}html.theme--catppuccin-mocha .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .media-content{overflow-x:auto}}html.theme--catppuccin-mocha .menu{font-size:1rem}html.theme--catppuccin-mocha .menu.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-mocha .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .menu.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .menu-list{line-height:1.25}html.theme--catppuccin-mocha .menu-list a{border-radius:3px;color:#cdd6f4;display:block;padding:0.5em 0.75em}html.theme--catppuccin-mocha .menu-list a:hover{background-color:#181825;color:#b8c5ef}html.theme--catppuccin-mocha .menu-list a.is-active{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .menu-list li ul{border-left:1px solid #585b70;margin:.75em;padding-left:.75em}html.theme--catppuccin-mocha .menu-label{color:#f7f8fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-mocha .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-mocha .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-mocha .message{background-color:#181825;border-radius:.4em;font-size:1rem}html.theme--catppuccin-mocha .message strong{color:currentColor}html.theme--catppuccin-mocha .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-mocha .message.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-mocha .message.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .message.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .message.is-white{background-color:#fff}html.theme--catppuccin-mocha .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-mocha .message.is-black{background-color:#fafafa}html.theme--catppuccin-mocha .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-mocha .message.is-light{background-color:#fafafa}html.theme--catppuccin-mocha .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-mocha .message.is-dark,html.theme--catppuccin-mocha .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-mocha .message.is-dark .message-header,html.theme--catppuccin-mocha .content kbd.message .message-header{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .message.is-dark .message-body,html.theme--catppuccin-mocha .content kbd.message .message-body{border-color:#313244}html.theme--catppuccin-mocha .message.is-primary,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink{background-color:#ebf3fe}html.theme--catppuccin-mocha .message.is-primary .message-header,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink .message-header{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .message.is-primary .message-body,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink .message-body{border-color:#89b4fa;color:#063c93}html.theme--catppuccin-mocha .message.is-link{background-color:#ebf3fe}html.theme--catppuccin-mocha .message.is-link .message-header{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .message.is-link .message-body{border-color:#89b4fa;color:#063c93}html.theme--catppuccin-mocha .message.is-info{background-color:#effbf9}html.theme--catppuccin-mocha .message.is-info .message-header{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-info .message-body{border-color:#94e2d5;color:#207466}html.theme--catppuccin-mocha .message.is-success{background-color:#f0faef}html.theme--catppuccin-mocha .message.is-success .message-header{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-success .message-body{border-color:#a6e3a1;color:#287222}html.theme--catppuccin-mocha .message.is-warning{background-color:#fef8ec}html.theme--catppuccin-mocha .message.is-warning .message-header{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-warning .message-body{border-color:#f9e2af;color:#8a620a}html.theme--catppuccin-mocha .message.is-danger{background-color:#fdedf1}html.theme--catppuccin-mocha .message.is-danger .message-header{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .message.is-danger .message-body{border-color:#f38ba8;color:#991036}html.theme--catppuccin-mocha .message-header{align-items:center;background-color:#cdd6f4;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-mocha .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-mocha .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .message-body{border-color:#585b70;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#cdd6f4;padding:1.25em 1.5em}html.theme--catppuccin-mocha .message-body code,html.theme--catppuccin-mocha .message-body pre{background-color:#fff}html.theme--catppuccin-mocha .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-mocha .modal.is-active{display:flex}html.theme--catppuccin-mocha .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-mocha .modal-content,html.theme--catppuccin-mocha .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-mocha .modal-content,html.theme--catppuccin-mocha .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-mocha .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-mocha .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-mocha .modal-card-head,html.theme--catppuccin-mocha .modal-card-foot{align-items:center;background-color:#181825;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-mocha .modal-card-head{border-bottom:1px solid #585b70;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-mocha .modal-card-title{color:#cdd6f4;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-mocha .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #585b70}html.theme--catppuccin-mocha .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-mocha .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#1e1e2e;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-mocha .navbar{background-color:#89b4fa;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-mocha .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-mocha .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-mocha .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-dark,html.theme--catppuccin-mocha .content kbd.navbar{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-burger,html.theme--catppuccin-mocha .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#313244;color:#fff}}html.theme--catppuccin-mocha .navbar.is-primary,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-burger,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa;color:#fff}}html.theme--catppuccin-mocha .navbar.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa;color:#fff}}html.theme--catppuccin-mocha .navbar.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#94e2d5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#f9e2af;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f38ba8;color:#fff}}html.theme--catppuccin-mocha .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-mocha .navbar.has-shadow{box-shadow:0 2px 0 0 #181825}html.theme--catppuccin-mocha .navbar.is-fixed-bottom,html.theme--catppuccin-mocha .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #181825}html.theme--catppuccin-mocha .navbar.is-fixed-top{top:0}html.theme--catppuccin-mocha html.has-navbar-fixed-top,html.theme--catppuccin-mocha body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-mocha .navbar-brand,html.theme--catppuccin-mocha .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-mocha .navbar-brand a.navbar-item:focus,html.theme--catppuccin-mocha .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-mocha .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-mocha .navbar-burger{color:#cdd6f4;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-mocha .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--catppuccin-mocha .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-mocha .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-mocha .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-mocha .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-mocha .navbar-menu{display:none}html.theme--catppuccin-mocha .navbar-item,html.theme--catppuccin-mocha .navbar-link{color:#cdd6f4;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-mocha .navbar-item .icon:only-child,html.theme--catppuccin-mocha .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-mocha a.navbar-item,html.theme--catppuccin-mocha .navbar-link{cursor:pointer}html.theme--catppuccin-mocha a.navbar-item:focus,html.theme--catppuccin-mocha a.navbar-item:focus-within,html.theme--catppuccin-mocha a.navbar-item:hover,html.theme--catppuccin-mocha a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar-link:focus,html.theme--catppuccin-mocha .navbar-link:focus-within,html.theme--catppuccin-mocha .navbar-link:hover,html.theme--catppuccin-mocha .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}html.theme--catppuccin-mocha .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .navbar-item img{max-height:1.75rem}html.theme--catppuccin-mocha .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-mocha .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-mocha .navbar-item.is-tab:focus,html.theme--catppuccin-mocha .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#89b4fa;border-bottom-style:solid;border-bottom-width:3px;color:#89b4fa;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-mocha .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-mocha .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-mocha .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-mocha .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .navbar>.container{display:block}html.theme--catppuccin-mocha .navbar-brand .navbar-item,html.theme--catppuccin-mocha .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-mocha .navbar-link::after{display:none}html.theme--catppuccin-mocha .navbar-menu{background-color:#89b4fa;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-mocha .navbar-menu.is-active{display:block}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch,html.theme--catppuccin-mocha .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-mocha .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-mocha .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-mocha html.has-navbar-fixed-top-touch,html.theme--catppuccin-mocha body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar,html.theme--catppuccin-mocha .navbar-menu,html.theme--catppuccin-mocha .navbar-start,html.theme--catppuccin-mocha .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-mocha .navbar{min-height:4rem}html.theme--catppuccin-mocha .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-mocha .navbar.is-spaced .navbar-start,html.theme--catppuccin-mocha .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-mocha .navbar.is-spaced a.navbar-item,html.theme--catppuccin-mocha .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#7f849c}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}html.theme--catppuccin-mocha .navbar-burger{display:none}html.theme--catppuccin-mocha .navbar-item,html.theme--catppuccin-mocha .navbar-link{align-items:center;display:flex}html.theme--catppuccin-mocha .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-mocha .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-mocha .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-mocha .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-mocha .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-mocha .navbar-dropdown{background-color:#89b4fa;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-mocha .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#7f849c}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}.navbar.is-spaced html.theme--catppuccin-mocha .navbar-dropdown,html.theme--catppuccin-mocha .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-mocha .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-mocha .navbar-divider{display:block}html.theme--catppuccin-mocha .navbar>.container .navbar-brand,html.theme--catppuccin-mocha .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-mocha .navbar>.container .navbar-menu,html.theme--catppuccin-mocha .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-mocha .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-mocha html.has-navbar-fixed-top-desktop,html.theme--catppuccin-mocha body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-mocha html.has-spaced-navbar-fixed-top,html.theme--catppuccin-mocha body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-mocha html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-mocha body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-mocha a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar-link.is-active{color:#89b4fa}html.theme--catppuccin-mocha a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-mocha .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-mocha .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-mocha .pagination.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-mocha .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .pagination.is-rounded .pagination-previous,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-mocha .pagination.is-rounded .pagination-next,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-mocha .pagination.is-rounded .pagination-link,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-mocha .pagination,html.theme--catppuccin-mocha .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link{border-color:#585b70;color:#89b4fa;min-width:2.5em}html.theme--catppuccin-mocha .pagination-previous:hover,html.theme--catppuccin-mocha .pagination-next:hover,html.theme--catppuccin-mocha .pagination-link:hover{border-color:#6c7086;color:#89dceb}html.theme--catppuccin-mocha .pagination-previous:focus,html.theme--catppuccin-mocha .pagination-next:focus,html.theme--catppuccin-mocha .pagination-link:focus{border-color:#6c7086}html.theme--catppuccin-mocha .pagination-previous:active,html.theme--catppuccin-mocha .pagination-next:active,html.theme--catppuccin-mocha .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-mocha .pagination-previous[disabled],html.theme--catppuccin-mocha .pagination-previous.is-disabled,html.theme--catppuccin-mocha .pagination-next[disabled],html.theme--catppuccin-mocha .pagination-next.is-disabled,html.theme--catppuccin-mocha .pagination-link[disabled],html.theme--catppuccin-mocha .pagination-link.is-disabled{background-color:#585b70;border-color:#585b70;box-shadow:none;color:#f7f8fd;opacity:0.5}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-mocha .pagination-link.is-current{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .pagination-ellipsis{color:#6c7086;pointer-events:none}html.theme--catppuccin-mocha .pagination-list{flex-wrap:wrap}html.theme--catppuccin-mocha .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .pagination{flex-wrap:wrap}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-mocha .pagination-previous{order:2}html.theme--catppuccin-mocha .pagination-next{order:3}html.theme--catppuccin-mocha .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-mocha .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-mocha .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-mocha .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-mocha .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-mocha .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-mocha .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-mocha .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-mocha .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-mocha .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-mocha .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-mocha .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-mocha .panel.is-dark .panel-heading,html.theme--catppuccin-mocha .content kbd.panel .panel-heading{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-mocha .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#313244}html.theme--catppuccin-mocha .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-mocha .content kbd.panel .panel-block.is-active .panel-icon{color:#313244}html.theme--catppuccin-mocha .panel.is-primary .panel-heading,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel.is-link .panel-heading{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .panel.is-link .panel-tabs a.is-active{border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .panel.is-link .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel.is-info .panel-heading{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-info .panel-tabs a.is-active{border-bottom-color:#94e2d5}html.theme--catppuccin-mocha .panel.is-info .panel-block.is-active .panel-icon{color:#94e2d5}html.theme--catppuccin-mocha .panel.is-success .panel-heading{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6e3a1}html.theme--catppuccin-mocha .panel.is-success .panel-block.is-active .panel-icon{color:#a6e3a1}html.theme--catppuccin-mocha .panel.is-warning .panel-heading{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#f9e2af}html.theme--catppuccin-mocha .panel.is-warning .panel-block.is-active .panel-icon{color:#f9e2af}html.theme--catppuccin-mocha .panel.is-danger .panel-heading{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f38ba8}html.theme--catppuccin-mocha .panel.is-danger .panel-block.is-active .panel-icon{color:#f38ba8}html.theme--catppuccin-mocha .panel-tabs:not(:last-child),html.theme--catppuccin-mocha .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-mocha .panel-heading{background-color:#45475a;border-radius:8px 8px 0 0;color:#b8c5ef;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-mocha .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-mocha .panel-tabs a{border-bottom:1px solid #585b70;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-mocha .panel-tabs a.is-active{border-bottom-color:#45475a;color:#71a4f9}html.theme--catppuccin-mocha .panel-list a{color:#cdd6f4}html.theme--catppuccin-mocha .panel-list a:hover{color:#89b4fa}html.theme--catppuccin-mocha .panel-block{align-items:center;color:#b8c5ef;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-mocha .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-mocha .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-mocha .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-mocha .panel-block.is-active{border-left-color:#89b4fa;color:#71a4f9}html.theme--catppuccin-mocha .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-mocha a.panel-block,html.theme--catppuccin-mocha label.panel-block{cursor:pointer}html.theme--catppuccin-mocha a.panel-block:hover,html.theme--catppuccin-mocha label.panel-block:hover{background-color:#181825}html.theme--catppuccin-mocha .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f7f8fd;margin-right:.75em}html.theme--catppuccin-mocha .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-mocha .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--catppuccin-mocha .tabs a{align-items:center;border-bottom-color:#585b70;border-bottom-style:solid;border-bottom-width:1px;color:#cdd6f4;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-mocha .tabs a:hover{border-bottom-color:#b8c5ef;color:#b8c5ef}html.theme--catppuccin-mocha .tabs li{display:block}html.theme--catppuccin-mocha .tabs li.is-active a{border-bottom-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .tabs ul{align-items:center;border-bottom-color:#585b70;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-mocha .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-mocha .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-mocha .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-mocha .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-mocha .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-mocha .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-mocha .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-mocha .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-mocha .tabs.is-boxed a:hover{background-color:#181825;border-bottom-color:#585b70}html.theme--catppuccin-mocha .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#585b70;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-mocha .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .tabs.is-toggle a{border-color:#585b70;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-mocha .tabs.is-toggle a:hover{background-color:#181825;border-color:#6c7086;z-index:2}html.theme--catppuccin-mocha .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-mocha .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-mocha .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-mocha .tabs.is-toggle li.is-active a{background-color:#89b4fa;border-color:#89b4fa;color:#fff;z-index:1}html.theme--catppuccin-mocha .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-mocha .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-mocha .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-mocha .tabs.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-mocha .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .column.is-narrow,html.theme--catppuccin-mocha .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full,html.theme--catppuccin-mocha .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters,html.theme--catppuccin-mocha .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds,html.theme--catppuccin-mocha .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half,html.theme--catppuccin-mocha .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third,html.theme--catppuccin-mocha .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter,html.theme--catppuccin-mocha .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth,html.theme--catppuccin-mocha .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths,html.theme--catppuccin-mocha .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths,html.theme--catppuccin-mocha .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths,html.theme--catppuccin-mocha .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters,html.theme--catppuccin-mocha .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds,html.theme--catppuccin-mocha .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half,html.theme--catppuccin-mocha .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third,html.theme--catppuccin-mocha .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter,html.theme--catppuccin-mocha .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth,html.theme--catppuccin-mocha .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths,html.theme--catppuccin-mocha .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths,html.theme--catppuccin-mocha .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths,html.theme--catppuccin-mocha .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-mocha .column.is-0,html.theme--catppuccin-mocha .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0,html.theme--catppuccin-mocha .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-mocha .column.is-1,html.theme--catppuccin-mocha .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1,html.theme--catppuccin-mocha .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2,html.theme--catppuccin-mocha .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2,html.theme--catppuccin-mocha .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3,html.theme--catppuccin-mocha .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3,html.theme--catppuccin-mocha .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-mocha .column.is-4,html.theme--catppuccin-mocha .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4,html.theme--catppuccin-mocha .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5,html.theme--catppuccin-mocha .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5,html.theme--catppuccin-mocha .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6,html.theme--catppuccin-mocha .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6,html.theme--catppuccin-mocha .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-mocha .column.is-7,html.theme--catppuccin-mocha .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7,html.theme--catppuccin-mocha .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8,html.theme--catppuccin-mocha .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8,html.theme--catppuccin-mocha .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9,html.theme--catppuccin-mocha .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9,html.theme--catppuccin-mocha .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-mocha .column.is-10,html.theme--catppuccin-mocha .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10,html.theme--catppuccin-mocha .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11,html.theme--catppuccin-mocha .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11,html.theme--catppuccin-mocha .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12,html.theme--catppuccin-mocha .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12,html.theme--catppuccin-mocha .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-mocha .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-mocha .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-mocha .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-mocha .columns.is-centered{justify-content:center}html.theme--catppuccin-mocha .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-mocha .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-mocha .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-mocha .columns.is-mobile{display:flex}html.theme--catppuccin-mocha .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-mocha .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-desktop{display:flex}}html.theme--catppuccin-mocha .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-mocha .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-mocha .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-mocha .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-mocha .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-mocha .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-mocha .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-mocha .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-mocha .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-mocha .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-mocha .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-mocha .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-mocha .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-mocha .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-mocha .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-mocha .tile.is-child{margin:0 !important}html.theme--catppuccin-mocha .tile.is-parent{padding:.75rem}html.theme--catppuccin-mocha .tile.is-vertical{flex-direction:column}html.theme--catppuccin-mocha .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .tile:not(.is-child){display:flex}html.theme--catppuccin-mocha .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .tile.is-3{flex:none;width:25%}html.theme--catppuccin-mocha .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .tile.is-6{flex:none;width:50%}html.theme--catppuccin-mocha .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .tile.is-9{flex:none;width:75%}html.theme--catppuccin-mocha .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-mocha .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-mocha .hero .navbar{background:none}html.theme--catppuccin-mocha .hero .tabs ul{border-bottom:none}html.theme--catppuccin-mocha .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-white strong{color:inherit}html.theme--catppuccin-mocha .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-mocha .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-mocha .hero.is-white .navbar-item,html.theme--catppuccin-mocha .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-mocha .hero.is-white a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-white .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-mocha .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-mocha .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-black strong{color:inherit}html.theme--catppuccin-mocha .hero.is-black .title{color:#fff}html.theme--catppuccin-mocha .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-mocha .hero.is-black .navbar-item,html.theme--catppuccin-mocha .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-black a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-black .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-mocha .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-light strong{color:inherit}html.theme--catppuccin-mocha .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-mocha .hero.is-light .navbar-item,html.theme--catppuccin-mocha .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-light .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-mocha .hero.is-dark,html.theme--catppuccin-mocha .content kbd.hero{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-dark strong,html.theme--catppuccin-mocha .content kbd.hero strong{color:inherit}html.theme--catppuccin-mocha .hero.is-dark .title,html.theme--catppuccin-mocha .content kbd.hero .title{color:#fff}html.theme--catppuccin-mocha .hero.is-dark .subtitle,html.theme--catppuccin-mocha .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-mocha .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-dark .subtitle strong,html.theme--catppuccin-mocha .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-dark .navbar-menu,html.theme--catppuccin-mocha .content kbd.hero .navbar-menu{background-color:#313244}}html.theme--catppuccin-mocha .hero.is-dark .navbar-item,html.theme--catppuccin-mocha .content kbd.hero .navbar-item,html.theme--catppuccin-mocha .hero.is-dark .navbar-link,html.theme--catppuccin-mocha .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-dark .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.hero .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.hero .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .hero.is-dark .tabs a,html.theme--catppuccin-mocha .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-dark .tabs a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs li.is-active a{color:#313244 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#313244}html.theme--catppuccin-mocha .hero.is-dark.is-bold,html.theme--catppuccin-mocha .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #181c2a 0%, #313244 71%, #3c3856 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-mocha .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #181c2a 0%, #313244 71%, #3c3856 100%)}}html.theme--catppuccin-mocha .hero.is-primary,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-primary strong,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-mocha .hero.is-primary .title,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-mocha .hero.is-primary .subtitle,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-primary .subtitle strong,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-primary .navbar-menu,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#89b4fa}}html.theme--catppuccin-mocha .hero.is-primary .navbar-item,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-mocha .hero.is-primary .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-primary .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .hero.is-primary .tabs a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-primary .tabs a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#89b4fa !important;opacity:1}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .hero.is-primary.is-bold,html.theme--catppuccin-mocha .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-mocha .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}}html.theme--catppuccin-mocha .hero.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-link strong{color:inherit}html.theme--catppuccin-mocha .hero.is-link .title{color:#fff}html.theme--catppuccin-mocha .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-link .navbar-menu{background-color:#89b4fa}}html.theme--catppuccin-mocha .hero.is-link .navbar-item,html.theme--catppuccin-mocha .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-link a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-link .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-link .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-link .tabs li.is-active a{color:#89b4fa !important;opacity:1}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .hero.is-link.is-bold{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}}html.theme--catppuccin-mocha .hero.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-info strong{color:inherit}html.theme--catppuccin-mocha .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-info .navbar-menu{background-color:#94e2d5}}html.theme--catppuccin-mocha .hero.is-info .navbar-item,html.theme--catppuccin-mocha .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-info .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-info .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-info .tabs li.is-active a{color:#94e2d5 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .hero.is-info.is-bold{background-image:linear-gradient(141deg, #63e0b6 0%, #94e2d5 71%, #a5eaea 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #63e0b6 0%, #94e2d5 71%, #a5eaea 100%)}}html.theme--catppuccin-mocha .hero.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-success strong{color:inherit}html.theme--catppuccin-mocha .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-success .navbar-menu{background-color:#a6e3a1}}html.theme--catppuccin-mocha .hero.is-success .navbar-item,html.theme--catppuccin-mocha .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-success .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-success .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-success .tabs li.is-active a{color:#a6e3a1 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .hero.is-success.is-bold{background-image:linear-gradient(141deg, #8ce071 0%, #a6e3a1 71%, #b2ebb7 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #8ce071 0%, #a6e3a1 71%, #b2ebb7 100%)}}html.theme--catppuccin-mocha .hero.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-warning strong{color:inherit}html.theme--catppuccin-mocha .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-warning .navbar-menu{background-color:#f9e2af}}html.theme--catppuccin-mocha .hero.is-warning .navbar-item,html.theme--catppuccin-mocha .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-warning .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-warning .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-warning .tabs li.is-active a{color:#f9e2af !important;opacity:1}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #fcbd79 0%, #f9e2af 71%, #fcf4c5 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #fcbd79 0%, #f9e2af 71%, #fcf4c5 100%)}}html.theme--catppuccin-mocha .hero.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-danger strong{color:inherit}html.theme--catppuccin-mocha .hero.is-danger .title{color:#fff}html.theme--catppuccin-mocha .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-danger .navbar-menu{background-color:#f38ba8}}html.theme--catppuccin-mocha .hero.is-danger .navbar-item,html.theme--catppuccin-mocha .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-danger .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-danger .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-danger .tabs li.is-active a{color:#f38ba8 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #f7549d 0%, #f38ba8 71%, #f8a0a9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f7549d 0%, #f38ba8 71%, #f8a0a9 100%)}}html.theme--catppuccin-mocha .hero.is-small .hero-body,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-mocha .hero.is-halfheight .hero-body,html.theme--catppuccin-mocha .hero.is-fullheight .hero-body,html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-mocha .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-mocha .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-mocha .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-mocha .hero-video{overflow:hidden}html.theme--catppuccin-mocha .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-mocha .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero-video{display:none}}html.theme--catppuccin-mocha .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero-buttons .button{display:flex}html.theme--catppuccin-mocha .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-mocha .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-mocha .hero-head,html.theme--catppuccin-mocha .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero-body{padding:3rem 3rem}}html.theme--catppuccin-mocha .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .section{padding:3rem 3rem}html.theme--catppuccin-mocha .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-mocha .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-mocha .footer{background-color:#181825;padding:3rem 1.5rem 6rem}html.theme--catppuccin-mocha h1 .docs-heading-anchor,html.theme--catppuccin-mocha h1 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h1 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h2 .docs-heading-anchor,html.theme--catppuccin-mocha h2 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h2 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h3 .docs-heading-anchor,html.theme--catppuccin-mocha h3 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h3 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h4 .docs-heading-anchor,html.theme--catppuccin-mocha h4 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h4 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h5 .docs-heading-anchor,html.theme--catppuccin-mocha h5 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h5 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h6 .docs-heading-anchor,html.theme--catppuccin-mocha h6 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h6 .docs-heading-anchor:visited{color:#cdd6f4}html.theme--catppuccin-mocha h1 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h2 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h3 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h4 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h5 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-mocha h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-mocha h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-mocha .docs-light-only{display:none !important}html.theme--catppuccin-mocha pre{position:relative;overflow:hidden}html.theme--catppuccin-mocha pre code,html.theme--catppuccin-mocha pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-mocha pre code:first-of-type,html.theme--catppuccin-mocha pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-mocha pre code:last-of-type,html.theme--catppuccin-mocha pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-mocha pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#cdd6f4;cursor:pointer;text-align:center}html.theme--catppuccin-mocha pre .copy-button:focus,html.theme--catppuccin-mocha pre .copy-button:hover{opacity:1;background:rgba(205,214,244,0.1);color:#89b4fa}html.theme--catppuccin-mocha pre .copy-button.success{color:#a6e3a1;opacity:1}html.theme--catppuccin-mocha pre .copy-button.error{color:#f38ba8;opacity:1}html.theme--catppuccin-mocha pre:hover .copy-button{opacity:1}html.theme--catppuccin-mocha .admonition{background-color:#181825;border-style:solid;border-width:2px;border-color:#bac2de;border-radius:4px;font-size:1rem}html.theme--catppuccin-mocha .admonition strong{color:currentColor}html.theme--catppuccin-mocha .admonition.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-mocha .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .admonition.is-default{background-color:#181825;border-color:#bac2de}html.theme--catppuccin-mocha .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#bac2de}html.theme--catppuccin-mocha .admonition.is-default>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-info{background-color:#181825;border-color:#94e2d5}html.theme--catppuccin-mocha .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#94e2d5}html.theme--catppuccin-mocha .admonition.is-info>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-success{background-color:#181825;border-color:#a6e3a1}html.theme--catppuccin-mocha .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6e3a1}html.theme--catppuccin-mocha .admonition.is-success>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-warning{background-color:#181825;border-color:#f9e2af}html.theme--catppuccin-mocha .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#f9e2af}html.theme--catppuccin-mocha .admonition.is-warning>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-danger{background-color:#181825;border-color:#f38ba8}html.theme--catppuccin-mocha .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#f38ba8}html.theme--catppuccin-mocha .admonition.is-danger>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-compat{background-color:#181825;border-color:#89dceb}html.theme--catppuccin-mocha .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#89dceb}html.theme--catppuccin-mocha .admonition.is-compat>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition-header{color:#bac2de;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-mocha .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-mocha details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-mocha details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-mocha details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-mocha .admonition-body{color:#cdd6f4;padding:0.5rem .75rem}html.theme--catppuccin-mocha .admonition-body pre{background-color:#181825}html.theme--catppuccin-mocha .admonition-body code{background-color:#181825}html.theme--catppuccin-mocha .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #585b70;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-mocha .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#181825;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #585b70;overflow:auto}html.theme--catppuccin-mocha .docstring>header code{background-color:transparent}html.theme--catppuccin-mocha .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-mocha .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-mocha .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-mocha .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #585b70}html.theme--catppuccin-mocha .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-mocha .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-mocha .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-mocha .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-mocha .documenter-example-output{background-color:#1e1e2e}html.theme--catppuccin-mocha .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#181825;color:#cdd6f4;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-mocha .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-mocha .outdated-warning-overlay a{color:#89b4fa}html.theme--catppuccin-mocha .outdated-warning-overlay a:hover{color:#89dceb}html.theme--catppuccin-mocha .content pre{border:2px solid #585b70;border-radius:4px}html.theme--catppuccin-mocha .content code{font-weight:inherit}html.theme--catppuccin-mocha .content a code{color:#89b4fa}html.theme--catppuccin-mocha .content a:hover code{color:#89dceb}html.theme--catppuccin-mocha .content h1 code,html.theme--catppuccin-mocha .content h2 code,html.theme--catppuccin-mocha .content h3 code,html.theme--catppuccin-mocha .content h4 code,html.theme--catppuccin-mocha .content h5 code,html.theme--catppuccin-mocha .content h6 code{color:#cdd6f4}html.theme--catppuccin-mocha .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-mocha .content blockquote>ul:first-child,html.theme--catppuccin-mocha .content blockquote>ol:first-child,html.theme--catppuccin-mocha .content .admonition-body>ul:first-child,html.theme--catppuccin-mocha .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-mocha pre,html.theme--catppuccin-mocha code{font-variant-ligatures:no-contextual}html.theme--catppuccin-mocha .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-mocha .breadcrumb a.is-disabled,html.theme--catppuccin-mocha .breadcrumb a.is-disabled:hover{color:#b8c5ef}html.theme--catppuccin-mocha .hljs{background:initial !important}html.theme--catppuccin-mocha .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-mocha .katex-display,html.theme--catppuccin-mocha mjx-container,html.theme--catppuccin-mocha .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-mocha html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-mocha li.no-marker{list-style:none}html.theme--catppuccin-mocha #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-mocha #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main{width:100%}html.theme--catppuccin-mocha #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-mocha #documenter .docs-main>header,html.theme--catppuccin-mocha #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar{background-color:#1e1e2e;border-bottom:1px solid #585b70;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-mocha #documenter .docs-main section.footnotes{border-top:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-mocha .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #585b70;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-mocha #documenter .docs-sidebar{display:flex;flex-direction:column;color:#cdd6f4;background-color:#181825;border-right:1px solid #585b70;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-mocha #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name a:hover{color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #585b70;display:none;padding:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #585b70;padding-bottom:1.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#cdd6f4;background:#181825}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#cdd6f4;background-color:#202031}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #585b70;border-bottom:1px solid #585b70;background-color:#11111b}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#11111b;color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#202031;color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-mocha #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#28283e}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#383856}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#28283e}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#383856}}html.theme--catppuccin-mocha kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-mocha .search-min-width-50{min-width:50%}html.theme--catppuccin-mocha .search-min-height-100{min-height:100%}html.theme--catppuccin-mocha .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-mocha .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover,html.theme--catppuccin-mocha .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-mocha .search-result-link .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-mocha .property-search-result-badge,html.theme--catppuccin-mocha .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-mocha .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:hover .search-filter,html.theme--catppuccin-mocha .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-mocha .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-mocha .search-filter:hover,html.theme--catppuccin-mocha .search-filter:focus{color:#333}html.theme--catppuccin-mocha .search-filter-selected{color:#313244;background-color:#b4befe}html.theme--catppuccin-mocha .search-filter-selected:hover,html.theme--catppuccin-mocha .search-filter-selected:focus{color:#313244}html.theme--catppuccin-mocha .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-mocha .search-divider{border-bottom:1px solid #585b70}html.theme--catppuccin-mocha .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-mocha .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-mocha .w-100{width:100%}html.theme--catppuccin-mocha .gap-2{gap:0.5rem}html.theme--catppuccin-mocha .gap-4{gap:1rem}html.theme--catppuccin-mocha .gap-8{gap:2rem}html.theme--catppuccin-mocha{background-color:#1e1e2e;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-mocha a{transition:all 200ms ease}html.theme--catppuccin-mocha .label{color:#cdd6f4}html.theme--catppuccin-mocha .button,html.theme--catppuccin-mocha .control.has-icons-left .icon,html.theme--catppuccin-mocha .control.has-icons-right .icon,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .select,html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea{height:2.5em;color:#cdd6f4}html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#cdd6f4}html.theme--catppuccin-mocha .select:after,html.theme--catppuccin-mocha .select select{border-width:1px}html.theme--catppuccin-mocha .menu-list a{transition:all 300ms ease}html.theme--catppuccin-mocha .modal-card-foot,html.theme--catppuccin-mocha .modal-card-head{border-color:#585b70}html.theme--catppuccin-mocha .navbar{border-radius:.4em}html.theme--catppuccin-mocha .navbar.is-transparent{background:none}html.theme--catppuccin-mocha .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .navbar .navbar-menu{background-color:#89b4fa;border-radius:0 0 .4em .4em}}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){color:#313244}html.theme--catppuccin-mocha .tag.is-link:not(body),html.theme--catppuccin-mocha .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-mocha .content kbd.is-link:not(body){color:#313244}html.theme--catppuccin-mocha .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-mocha .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-mocha .ansi span.sgr3{font-style:italic}html.theme--catppuccin-mocha .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-mocha .ansi span.sgr7{color:#1e1e2e;background-color:#cdd6f4}html.theme--catppuccin-mocha .ansi span.sgr8{color:transparent}html.theme--catppuccin-mocha .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-mocha .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-mocha .ansi span.sgr30{color:#45475a}html.theme--catppuccin-mocha .ansi span.sgr31{color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr32{color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr33{color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr34{color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr35{color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr36{color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr37{color:#bac2de}html.theme--catppuccin-mocha .ansi span.sgr40{background-color:#45475a}html.theme--catppuccin-mocha .ansi span.sgr41{background-color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr42{background-color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr43{background-color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr44{background-color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr45{background-color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr46{background-color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr47{background-color:#bac2de}html.theme--catppuccin-mocha .ansi span.sgr90{color:#585b70}html.theme--catppuccin-mocha .ansi span.sgr91{color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr92{color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr93{color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr94{color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr95{color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr96{color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr97{color:#a6adc8}html.theme--catppuccin-mocha .ansi span.sgr100{background-color:#585b70}html.theme--catppuccin-mocha .ansi span.sgr101{background-color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr102{background-color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr103{background-color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr104{background-color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr105{background-color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr106{background-color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr107{background-color:#a6adc8}html.theme--catppuccin-mocha code.language-julia-repl>span.hljs-meta{color:#a6e3a1;font-weight:bolder}html.theme--catppuccin-mocha code .hljs{color:#cdd6f4;background:#1e1e2e}html.theme--catppuccin-mocha code .hljs-keyword{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-built_in{color:#f38ba8}html.theme--catppuccin-mocha code .hljs-type{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-literal{color:#fab387}html.theme--catppuccin-mocha code .hljs-number{color:#fab387}html.theme--catppuccin-mocha code .hljs-operator{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-punctuation{color:#bac2de}html.theme--catppuccin-mocha code .hljs-property{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-regexp{color:#f5c2e7}html.theme--catppuccin-mocha code .hljs-string{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-char.escape_{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-subst{color:#a6adc8}html.theme--catppuccin-mocha code .hljs-symbol{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-variable{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-variable.language_{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-variable.constant_{color:#fab387}html.theme--catppuccin-mocha code .hljs-title{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-title.class_{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-title.function_{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-params{color:#cdd6f4}html.theme--catppuccin-mocha code .hljs-comment{color:#585b70}html.theme--catppuccin-mocha code .hljs-doctag{color:#f38ba8}html.theme--catppuccin-mocha code .hljs-meta{color:#fab387}html.theme--catppuccin-mocha code .hljs-section{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-tag{color:#a6adc8}html.theme--catppuccin-mocha code .hljs-name{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-attr{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-attribute{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-bullet{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-code{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-emphasis{color:#f38ba8;font-style:italic}html.theme--catppuccin-mocha code .hljs-strong{color:#f38ba8;font-weight:bold}html.theme--catppuccin-mocha code .hljs-formula{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-link{color:#74c7ec;font-style:italic}html.theme--catppuccin-mocha code .hljs-quote{color:#a6e3a1;font-style:italic}html.theme--catppuccin-mocha code .hljs-selector-tag{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-selector-id{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-selector-class{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-selector-attr{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-selector-pseudo{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-template-tag{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-template-variable{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-addition{color:#a6e3a1;background:rgba(166,227,161,0.15)}html.theme--catppuccin-mocha code .hljs-deletion{color:#f38ba8;background:rgba(243,139,168,0.15)}html.theme--catppuccin-mocha .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover,html.theme--catppuccin-mocha .search-result-link:focus{background-color:#313244}html.theme--catppuccin-mocha .search-result-link .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:hover .search-filter,html.theme--catppuccin-mocha .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:focus .search-filter{color:#313244 !important;background-color:#b4befe !important}html.theme--catppuccin-mocha .search-result-title{color:#cdd6f4}html.theme--catppuccin-mocha .search-result-highlight{background-color:#f38ba8;color:#181825}html.theme--catppuccin-mocha .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-mocha .w-100{width:100%}html.theme--catppuccin-mocha .gap-2{gap:0.5rem}html.theme--catppuccin-mocha .gap-4{gap:1rem} diff --git a/dev/assets/themes/documenter-dark.css b/dev/assets/themes/documenter-dark.css new file mode 100644 index 00000000..2892b385 --- /dev/null +++ b/dev/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#3c5dcd !important}a.has-text-info:hover,a.has-text-info:focus{color:#2c48aa !important}.has-background-info{background-color:#3c5dcd !important}.has-text-info-light{color:#eff2fb !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c6d0f0 !important}.has-background-info-light{background-color:#eff2fb !important}.has-text-info-dark{color:#3253c3 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#5571d3 !important}.has-background-info-dark{background-color:#3253c3 !important}.has-text-success{color:#259a12 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a6c0d !important}.has-background-success{background-color:#259a12 !important}.has-text-success-light{color:#effded !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c7f8bf !important}.has-background-success-light{background-color:#effded !important}.has-text-success-dark{color:#2ec016 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#3fe524 !important}.has-background-success-dark{background-color:#2ec016 !important}.has-text-warning{color:#f4c72f !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#e4b30c !important}.has-background-warning{background-color:#f4c72f !important}.has-text-warning-light{color:#fefaec !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fbedbb !important}.has-background-warning-light{background-color:#fefaec !important}.has-text-warning-dark{color:#8c6e07 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#bd940a !important}.has-background-warning-dark{background-color:#8c6e07 !important}.has-text-danger{color:#cb3c33 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a23029 !important}.has-background-danger{background-color:#cb3c33 !important}.has-text-danger-light{color:#fbefef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f1c8c6 !important}.has-background-danger-light{background-color:#fbefef !important}.has-text-danger-dark{color:#c03930 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#d35850 !important}.has-background-danger-dark{background-color:#c03930 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#3c5dcd;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#3355c9;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#3151bf;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#3c5dcd;border-color:#3c5dcd;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;box-shadow:none;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#e5e9f8;border-color:transparent;color:#3253c3}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#dae1f6;border-color:transparent;color:#3253c3}html.theme--documenter-dark .button.is-success{background-color:#259a12;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#228f11;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#20830f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#259a12;border-color:#259a12;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#259a12}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#259a12;color:#259a12}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#259a12;border-color:#259a12;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #259a12 #259a12 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#259a12;box-shadow:none;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #259a12 #259a12 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#effded;color:#2ec016}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#e5fce1;border-color:transparent;color:#2ec016}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#dbfad6;border-color:transparent;color:#2ec016}html.theme--documenter-dark .button.is-warning{background-color:#f4c72f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#f3c423;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#f3c017;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#f4c72f;border-color:#f4c72f;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#f4c72f;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#f4c72f;border-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #f4c72f #f4c72f !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#f4c72f;box-shadow:none;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f4c72f #f4c72f !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fdf7e0;border-color:transparent;color:#8c6e07}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fdf3d3;border-color:transparent;color:#8c6e07}html.theme--documenter-dark .button.is-danger{background-color:#cb3c33;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#c13930;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#b7362e;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#cb3c33;border-color:#cb3c33;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#cb3c33;border-color:#cb3c33;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;box-shadow:none;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fbefef;color:#c03930}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#f8e6e5;border-color:transparent;color:#c03930}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#f6dcda;border-color:transparent;color:#c03930}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .notification.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#effded;color:#2ec016}html.theme--documenter-dark .notification.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .notification.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fbefef;color:#c03930}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #3c5dcd 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#259a12}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#259a12}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#259a12}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #259a12 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #f4c72f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #cb3c33 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#259a12;border-color:#259a12;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#f4c72f;border-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#cb3c33;border-color:#cb3c33;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#259a12;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#effded;color:#2ec016}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#cb3c33;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fbefef;color:#c03930}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#3c5dcd}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#259a12}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#f4c72f}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#cb3c33}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#3c5dcd}html.theme--documenter-dark .select.is-info select{border-color:#3c5dcd}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#3151bf}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#259a12}html.theme--documenter-dark .select.is-success select{border-color:#259a12}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#20830f}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#f4c72f}html.theme--documenter-dark .select.is-warning select{border-color:#f4c72f}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#f3c017}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#cb3c33}html.theme--documenter-dark .select.is-danger select{border-color:#cb3c33}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#b7362e}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#3c5dcd;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#3355c9;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(60,93,205,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#3151bf;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#259a12;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#228f11;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(37,154,18,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#20830f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#f4c72f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#f3c423;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(244,199,47,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#f3c017;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#cb3c33;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#c13930;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(203,60,51,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#b7362e;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#3c5dcd}html.theme--documenter-dark .help.is-success{color:#259a12}html.theme--documenter-dark .help.is-warning{color:#f4c72f}html.theme--documenter-dark .help.is-danger{color:#cb3c33}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#eff2fb}html.theme--documenter-dark .message.is-info .message-header{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#3c5dcd;color:#3253c3}html.theme--documenter-dark .message.is-success{background-color:#effded}html.theme--documenter-dark .message.is-success .message-header{background-color:#259a12;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#259a12;color:#2ec016}html.theme--documenter-dark .message.is-warning{background-color:#fefaec}html.theme--documenter-dark .message.is-warning .message-header{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-warning .message-body{border-color:#f4c72f;color:#8c6e07}html.theme--documenter-dark .message.is-danger{background-color:#fbefef}html.theme--documenter-dark .message.is-danger .message-header{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#cb3c33;color:#c03930}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3c5dcd;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#259a12;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#f4c72f;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#cb3c33;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#3c5dcd}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#3c5dcd}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#259a12;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#259a12}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#259a12}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#f4c72f}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#f4c72f}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#cb3c33}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#cb3c33}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#3c5dcd}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#3c5dcd !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3c5dcd}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#259a12}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#259a12 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#259a12}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#f4c72f}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#f4c72f !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #f09100 0%, #f4c72f 71%, #faef42 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f09100 0%, #f4c72f 71%, #faef42 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#cb3c33}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#cb3c33 !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#cb3c33}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#5a76d5}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#3c5dcd;box-shadow:0 0 0 2px rgba(60,93,205,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#2dbc16}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#259a12;box-shadow:0 0 0 2px rgba(37,154,18,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#f6d153}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#f4c72f;box-shadow:0 0 0 2px rgba(244,199,47,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#d35951}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#cb3c33;box-shadow:0 0 0 2px rgba(203,60,51,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:2px;border-color:#dbdee0;border-radius:4px;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#dbdee0}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#3c5dcd}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#3c5dcd}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#259a12}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#259a12}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#f4c72f}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#f4c72f}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#cb3c33}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#cb3c33}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#3489da}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#3489da}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#dbdee0;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #5e6d6f;border-radius:4px;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:2px solid #5e6d6f;border-radius:4px}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content a:hover code{color:#1dd2af}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/dev/assets/themes/documenter-light.css b/dev/assets/themes/documenter-light.css new file mode 100644 index 00000000..a435b3b6 --- /dev/null +++ b/dev/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#3c5dcd !important}a.has-text-info:hover,a.has-text-info:focus{color:#2c48aa !important}.has-background-info{background-color:#3c5dcd !important}.has-text-info-light{color:#eff2fb !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c6d0f0 !important}.has-background-info-light{background-color:#eff2fb !important}.has-text-info-dark{color:#3253c3 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#5571d3 !important}.has-background-info-dark{background-color:#3253c3 !important}.has-text-success{color:#259a12 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a6c0d !important}.has-background-success{background-color:#259a12 !important}.has-text-success-light{color:#effded !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c7f8bf !important}.has-background-success-light{background-color:#effded !important}.has-text-success-dark{color:#2ec016 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#3fe524 !important}.has-background-success-dark{background-color:#2ec016 !important}.has-text-warning{color:#a98800 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#765f00 !important}.has-background-warning{background-color:#a98800 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#cca400 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffcd00 !important}.has-background-warning-dark{background-color:#cca400 !important}.has-text-danger{color:#cb3c33 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a23029 !important}.has-background-danger{background-color:#cb3c33 !important}.has-text-danger-light{color:#fbefef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f1c8c6 !important}.has-background-danger-light{background-color:#fbefef !important}.has-text-danger-dark{color:#c03930 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#d35850 !important}.has-background-danger-dark{background-color:#c03930 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#3c5dcd;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#3355c9;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#3151bf;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3c5dcd;border-color:#3c5dcd;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3c5dcd}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3c5dcd}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;color:#3c5dcd}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;box-shadow:none;color:#3c5dcd}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#3c5dcd}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eff2fb;color:#3253c3}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e5e9f8;border-color:transparent;color:#3253c3}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#dae1f6;border-color:transparent;color:#3253c3}.button.is-success{background-color:#259a12;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#228f11;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#20830f;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#259a12;border-color:#259a12;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#259a12}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#259a12}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#259a12;color:#259a12}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#259a12;border-color:#259a12;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #259a12 #259a12 !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#259a12;box-shadow:none;color:#259a12}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#259a12}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #259a12 #259a12 !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effded;color:#2ec016}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e5fce1;border-color:transparent;color:#2ec016}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#dbfad6;border-color:transparent;color:#2ec016}.button.is-warning{background-color:#a98800;border-color:transparent;color:#fff}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#9c7d00;border-color:transparent;color:#fff}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:#fff}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#8f7300;border-color:transparent;color:#fff}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#a98800;border-color:#a98800;box-shadow:none}.button.is-warning.is-inverted{background-color:#fff;color:#a98800}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#a98800}.button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#a98800;color:#a98800}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#a98800;border-color:#a98800;color:#fff}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #a98800 #a98800 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#a98800;box-shadow:none;color:#a98800}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#a98800}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a98800 #a98800 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning.is-light{background-color:#fffbeb;color:#cca400}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff9de;border-color:transparent;color:#cca400}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#cca400}.button.is-danger{background-color:#cb3c33;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#c13930;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#b7362e;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#cb3c33;border-color:#cb3c33;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#cb3c33}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#cb3c33}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;color:#cb3c33}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#cb3c33;border-color:#cb3c33;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;box-shadow:none;color:#cb3c33}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#cb3c33}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#fbefef;color:#c03930}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#f8e6e5;border-color:transparent;color:#c03930}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#f6dcda;border-color:transparent;color:#c03930}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#3c5dcd;color:#fff}.notification.is-info.is-light{background-color:#eff2fb;color:#3253c3}.notification.is-success{background-color:#259a12;color:#fff}.notification.is-success.is-light{background-color:#effded;color:#2ec016}.notification.is-warning{background-color:#a98800;color:#fff}.notification.is-warning.is-light{background-color:#fffbeb;color:#cca400}.notification.is-danger{background-color:#cb3c33;color:#fff}.notification.is-danger.is-light{background-color:#fbefef;color:#c03930}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3c5dcd}.progress.is-info::-moz-progress-bar{background-color:#3c5dcd}.progress.is-info::-ms-fill{background-color:#3c5dcd}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #3c5dcd 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#259a12}.progress.is-success::-moz-progress-bar{background-color:#259a12}.progress.is-success::-ms-fill{background-color:#259a12}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #259a12 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#a98800}.progress.is-warning::-moz-progress-bar{background-color:#a98800}.progress.is-warning::-ms-fill{background-color:#a98800}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #a98800 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#cb3c33}.progress.is-danger::-moz-progress-bar{background-color:#cb3c33}.progress.is-danger::-ms-fill{background-color:#cb3c33}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #cb3c33 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}.table td.is-success,.table th.is-success{background-color:#259a12;border-color:#259a12;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#a98800;border-color:#a98800;color:#fff}.table td.is-danger,.table th.is-danger{background-color:#cb3c33;border-color:#cb3c33;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#3c5dcd;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#eff2fb;color:#3253c3}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#259a12;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#effded;color:#2ec016}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#a98800;color:#fff}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#cca400}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#cb3c33;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fbefef;color:#c03930}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#3c5dcd}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#259a12}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#a98800}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#cb3c33}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#3c5dcd}.select.is-info select{border-color:#3c5dcd}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#3151bf}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.select.is-success:not(:hover)::after{border-color:#259a12}.select.is-success select{border-color:#259a12}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#20830f}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.select.is-warning:not(:hover)::after{border-color:#a98800}.select.is-warning select{border-color:#a98800}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#8f7300}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.select.is-danger:not(:hover)::after{border-color:#cb3c33}.select.is-danger select{border-color:#cb3c33}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#b7362e}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3c5dcd;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#3355c9;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(60,93,205,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#3151bf;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#259a12;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#228f11;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(37,154,18,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#20830f;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#a98800;border-color:transparent;color:#fff}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#9c7d00;border-color:transparent;color:#fff}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(169,136,0,0.25);color:#fff}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#8f7300;border-color:transparent;color:#fff}.file.is-danger .file-cta{background-color:#cb3c33;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#c13930;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(203,60,51,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#b7362e;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#3c5dcd}.help.is-success{color:#259a12}.help.is-warning{color:#a98800}.help.is-danger{color:#cb3c33}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#eff2fb}.message.is-info .message-header{background-color:#3c5dcd;color:#fff}.message.is-info .message-body{border-color:#3c5dcd;color:#3253c3}.message.is-success{background-color:#effded}.message.is-success .message-header{background-color:#259a12;color:#fff}.message.is-success .message-body{border-color:#259a12;color:#2ec016}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#a98800;color:#fff}.message.is-warning .message-body{border-color:#a98800;color:#cca400}.message.is-danger{background-color:#fbefef}.message.is-danger .message-header{background-color:#cb3c33;color:#fff}.message.is-danger .message-body{border-color:#cb3c33;color:#c03930}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#3c5dcd;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#3151bf;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#3151bf;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#3151bf;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3c5dcd;color:#fff}}.navbar.is-success{background-color:#259a12;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#20830f;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#20830f;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#20830f;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#259a12;color:#fff}}.navbar.is-warning{background-color:#a98800;color:#fff}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:#fff}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:#fff}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#a98800;color:#fff}}.navbar.is-danger{background-color:#cb3c33;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#b7362e;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#b7362e;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#b7362e;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#cb3c33;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#3c5dcd;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3c5dcd}.panel.is-info .panel-block.is-active .panel-icon{color:#3c5dcd}.panel.is-success .panel-heading{background-color:#259a12;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#259a12}.panel.is-success .panel-block.is-active .panel-icon{color:#259a12}.panel.is-warning .panel-heading{background-color:#a98800;color:#fff}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#a98800}.panel.is-warning .panel-block.is-active .panel-icon{color:#a98800}.panel.is-danger .panel-heading{background-color:#cb3c33;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#cb3c33}.panel.is-danger .panel-block.is-active .panel-icon{color:#cb3c33}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#3c5dcd;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#3c5dcd}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#3151bf;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#3c5dcd !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3c5dcd}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}}.hero.is-success{background-color:#259a12;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#259a12}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#20830f;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#259a12 !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#259a12}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}}.hero.is-warning{background-color:#a98800;color:#fff}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:#fff}.hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#a98800}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#8f7300;color:#fff}.hero.is-warning .tabs a{color:#fff;opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#a98800 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:#fff}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#a98800}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #764b00 0%, #a98800 71%, #c2bd00 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #764b00 0%, #a98800 71%, #c2bd00 100%)}}.hero.is-danger{background-color:#cb3c33;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#cb3c33}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#b7362e;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#cb3c33 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#cb3c33}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#f5f5f5;border-style:solid;border-width:2px;border-color:#4a4a4a;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#f5f5f5;border-color:#4a4a4a}.admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#4a4a4a}.admonition.is-default>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-info{background-color:#f5f5f5;border-color:#3c5dcd}.admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#3c5dcd}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#f5f5f5;border-color:#259a12}.admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#259a12}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#f5f5f5;border-color:#a98800}.admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#a98800}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#f5f5f5;border-color:#cb3c33}.admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#cb3c33}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#f5f5f5;border-color:#3489da}.admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#3489da}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#4a4a4a;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #dbdbdb;border-radius:4px;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#f5f5f5;color:rgba(0,0,0,0.7);border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:2px solid #dbdbdb;border-radius:4px}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content a:hover code{color:#363636}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/dev/assets/themeswap.js b/dev/assets/themeswap.js new file mode 100644 index 00000000..9f5eebe6 --- /dev/null +++ b/dev/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/dev/assets/warner.js b/dev/assets/warner.js new file mode 100644 index 00000000..3f6f5d00 --- /dev/null +++ b/dev/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/dev/index.html b/dev/index.html new file mode 100644 index 00000000..fcc6d5f6 --- /dev/null +++ b/dev/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

MathematicalSystems.jl

MathematicalSystems is a Julia package for mathematical systems interfaces.

Features

  • Generic and flexible systems definitions, while being fast and type stable.
  • Types for mathematical systems modeling: continuous, discrete, controlled, descriptor systems, etc.
  • Iterator interfaces to handle constant or time-varying inputs.

Ecosystem

The following packages use MathematicalSystems.jl:

Manual Outline

Library Outline

diff --git a/dev/lib/internals/index.html b/dev/lib/internals/index.html new file mode 100644 index 00000000..91e2c9c4 --- /dev/null +++ b/dev/lib/internals/index.html @@ -0,0 +1,60 @@ + +Internals · MathematicalSystems.jl

Internals

This section describes functions that are internal to the library.

Expression Handling

MathematicalSystems._corresponding_typeFunction
_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

Return the system type whose field names match those in fields.

Input

  • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
  • fields – tuple of field names

Output

The system type (either discrete or continuous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

Examples

julia> using MathematicalSystems: _corresponding_type
+
+julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
+LinearContinuousSystem
+
+julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
+ConstrainedLinearControlContinuousSystem
source
MathematicalSystems._capture_dimFunction
_capture_dim(expr)

Return the tuple containing the dimension(s) in expr.

Input

  • expr – symbolic expression that can be of any of the following forms:

    • :x or :(x) – state dimension
    • :(x, u) – state and input dimension
    • :(x, u, w) – state, input and noise dimensions

Output

  • The scalar x if expr specifies the state dimension.
  • The vector [x, u] if expr specifies state and input dimension.
  • The vector [x, u, w] if expr specifies state, input and noise dimensions.
source
MathematicalSystems.extract_dyn_equation_parametersFunction
extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

  • (:A_user, :A)
  • (:B_user, :B)
  • (:c_user, :c)
  • (:D_user, :D)
  • (:f_user, :f)
  • (:statedim_user :statedim)
  • (:inputdim_user :inputdim)
  • (:noisedim_user :noisedim)

and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

Input

  • equation – dynamic equation
  • state – state variable
  • input – input variable
  • noise – noise variable
  • dim – dimensionality
  • AT – abstract system type

Output

Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

source
MathematicalSystems.add_asteriskFunction
add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

Input

  • summand – expressions
  • state – state variable
  • input – input variable
  • noise – noise variable

Output

Multiplication expression or symbol.

Example

julia> using MathematicalSystems: add_asterisk
+
+julia> add_asterisk(:(A1*x), :x, :u, :w)
+:(A1 * x)
+
+julia> add_asterisk(:(c1), :x, :u, :w)
+:c1
+
+julia> add_asterisk(:(Ax1), :x1, :u, :w)
+:(A * x1)
+
+julia> add_asterisk(:(Awb), :x1, :u, :wb)
+:(A * wb)
+
+julia> add_asterisk(:(A1u), :x, :u, :w)
+:(A1 * u)
+
+julia> add_asterisk(:(A1ub), :x, :u, :w)
+:A1ub
source
MathematicalSystems._sortFunction
_sort(parameters::Vector, order::Tuple)

Filter and sort the vector parameters according to order.

Input

  • parameters – vector of tuples
  • order – tuple of symbols

Output

A new vector of tuples corresponding to parameters filtered and sorted according to order.

Examples

julia> using MathematicalSystems: _sort
+
+julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
+
+julia> _sort(parameters, (:X, :U, :W))
+3-element Vector{Tuple{Any, Symbol}}:
+ (:X1, :X)
+ (:U1, :U)
+ (:W1, :W)
+
+julia>  parameters = [(:const, :c), (:A, :A)];
+
+julia> _sort(parameters, (:A, :B, :c, :D))
+2-element Vector{Tuple{Any, Symbol}}:
+ (:A, :A)
+ (:const, :c)

Notes

parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

source

Querying Expressions

MathematicalSystems.is_equationFunction
is_equation(expr)

Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

Input

  • expr – expression

Output

A Bool indicating whether expr is an equation or not.

source
MathematicalSystems.extract_sumFunction
extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

Input

  • summands – array of expressions
  • state – state variable
  • input – input variable
  • noise – noise variable

Output

Array of tuples of symbols with variable name and field name.

Example

julia> using MathematicalSystems: extract_sum
+
+julia> extract_sum([:(A1*x)], :x, :u, :w)
+1-element Vector{Tuple{Any, Symbol}}:
+ (:(hcat(A1)), :A)
+
+julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
+3-element Vector{Tuple{Any, Symbol}}:
+ (:(hcat(A1)), :A)
+ (:(hcat(B1)), :B)
+ (:(vcat(c)), :c)
+
+julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
+3-element Vector{Tuple{Any, Symbol}}:
+ (:(hcat(A1)), :A)
+ (:(hcat(B1)), :B)
+ (:(hcat(B2)), :D)

Notes

If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

source

Evaluation of AbstractSystem at Given State

MathematicalSystems._instantiateFunction
_instantiate(system::AbstractSystem, x::AbstractVector;
+            [check_constraints]=true)

Return the result of instantiating an AbstractSystem at the current state.

Input

  • systemAbstractSystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x.

Notes

The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

source
_instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;
+            [check_constraints]=true)

Return the result of instantiating an AbstractSystem at the current state and applying one input.

Input

  • systemAbstractSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type) or noise, if system is not controlled
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x and input u.

Notes

If the system is not controlled but noisy, the input u is interpreted as noise.

The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

source
_instantiate(system::AbstractSystem,
+            x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

Return the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.

Input

  • systemAbstractSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type)
  • w – noise (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x, input u and noise w.

Notes

The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

source

Naming Convention for Systems' Fields

Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

FieldDescriptionGetter function
Astate matrixstate_matrix
Binput matrixinput_matrix
caffine termaffine_term
Dnoise matrixnoise_matrix
Xstate constraintsstateset
Uinput constraintsinputset
Wdisturbance setnoiseset
diff --git a/dev/lib/methods/index.html b/dev/lib/methods/index.html new file mode 100644 index 00000000..0b170d01 --- /dev/null +++ b/dev/lib/methods/index.html @@ -0,0 +1,17 @@ + +Methods · MathematicalSystems.jl

Methods

This section describes systems methods implemented in MathematicalSystems.jl.

States

Inputs

MathematicalSystems.nextinputFunction
nextinput(input::ConstantInput, n::Int=1)

Returns the first n elements of this input.

Input

  • input – a constant input
  • n – (optional, default: 1) the number of desired elements

Output

A repeated iterator that generates n equal samples of this input.

source
nextinput(input::VaryingInput, n::Int=1)

Returns the first n elements of this input.

Input

  • input – varying input
  • n – (optional, default: 1) number of desired elements

Output

An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

source

Noises

Output

Traits

MathematicalSystems.islinearMethod
islinear(s::AbstractSystem)

Specifies if the dynamics of system s is specified by linear equations.

Notes

We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

source
MathematicalSystems.islinearMethod
islinear(m::AbstractMap)

Specifies if the map m is linear or not.

Notes

A map is linear if it preserves the operations of scalar multiplication and vector addition.

source
MathematicalSystems.isaffineMethod
isaffine(s::AbstractSystem)

Specifies if the dynamics of system s is specified by affine equations.

Notes

An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

source
MathematicalSystems.ispolynomialMethod
ispolynomial(s::AbstractSystem)

Specifies if the dynamics of system s is specified by polynomial equations.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

source
MathematicalSystems.isblackboxMethod
isblackbox(s::AbstractSystem)

Specifies if no specific structure is assumed for the dynamics of system s.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

source
MathematicalSystems.isnoisyMethod
isnoisy(s::AbstractSystem)

Determines if the dynamics of system s contains a noise term w.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

source
MathematicalSystems.iscontrolledMethod
iscontrolled(s::AbstractSystem)

Determines if the dynamics of system s contains a control input u.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

source
MathematicalSystems.isconstrainedMethod
isconstrained(s::AbstractSystem)

Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

source
MathematicalSystems.state_matrixMethod
state_matrix(s::AbstractSystem)

Return the state matrix of an affine system.

Notes

The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

source
MathematicalSystems.input_matrixMethod
input_matrix(s::AbstractSystem)

Return the input matrix of a system with linear input.

Notes

The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

source
MathematicalSystems.noise_matrixMethod
noise_matrix(s::AbstractSystem)

Return the noise matrix of a system with linear noise.

Notes

The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

source
MathematicalSystems.affine_termMethod
affine_term(s::AbstractSystem)

Return the affine term in an affine system.

Notes

The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

source

Maps

Successor

MathematicalSystems.successorFunction
successor(system::DiscreteIdentitySystem, x::AbstractVector)

Return the successor state of a DiscreteIdentitySystem.

Input

  • systemDiscreteIdentitySystem
  • x – state (it should be any vector type)

Output

The same state x.

source
successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
+          [check_constraints]=true)

Return the successor state of a ConstrainedDiscreteIdentitySystem.

Input

  • systemConstrainedDiscreteIdentitySystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The same state x.

source
successor(system::AbstractDiscreteSystem, x::AbstractVector;
+          [check_constraints]=true)

Return the successor state of an AbstractDiscreteSystem.

Input

  • systemAbstractDiscreteSystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x.

source
successor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;
+          [check_constraints]=true)

Return the successor state of an AbstractDiscreteSystem.

Input

  • systemAbstractDiscreteSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type) or noise, if system is not controlled
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x and input u.

Notes

If the system is not controlled but noisy, the input u is interpreted as noise.

source
successor(system::AbstractDiscreteSystem,
+          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

Return the successor state of an AbstractDiscreteSystem.

Input

  • systemAbstractDiscreteSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type)
  • w – noise (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x, input u and noise w.

source

Vector Field

MathematicalSystems.vector_fieldFunction
vector_field(system::ContinuousIdentitySystem, x::AbstractVector)

Return the vector field state of a ContinuousIdentitySystem.

Input

  • systemContinuousIdentitySystem
  • x – state (it should be any vector type)

Output

A zeros vector of dimension statedim.

source
vector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;
+          [check_constraints]=true)

Return the vector field state of a ConstrainedContinuousIdentitySystem.

Input

  • systemConstrainedContinuousIdentitySystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

A zeros vector of dimension statedim.

source
vector_field(system::AbstractContinuousSystem, x::AbstractVector;
+          [check_constraints]=true)

Return the vector field state of an AbstractContinuousSystem.

Input

  • systemAbstractContinuousSystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The vector field of the system at state x.

source
vector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;
+          [check_constraints]=true)

Return the vector field state of an AbstractContinuousSystem.

Input

  • systemAbstractContinuousSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type) or noise, if system is not controlled
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The vector field of the system at state x and applying input u.

Notes

If the system is not controlled but noisy, the input u is interpreted as noise.

source
vector_field(system::AbstractContinuousSystem,
+          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

Return the vector field state of an AbstractContinuousSystem.

Input

  • systemAbstractContinuousSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type)
  • w – noise (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The vector field of the system at state x and applying input u and noise w.

source

Discretization

MathematicalSystems.discretizeFunction
discretize(system::AbstractContinuousSystem, ΔT::Real,
+           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
+           constructor=_default_complementary_constructor(system))

Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

Input

  • system – an affine continuous system
  • ΔT – sampling time
  • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
  • constructor – (optional, default: _default_complementary_constructor(system)) construction method

Output

Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

source

Internal Methods

MathematicalSystems._discretizeFunction
_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
+            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

Input

  • `` – discretization algorithm, used for dispatch
  • ΔT – sampling time
  • A – state matrix
  • B – input matrix
  • c – vector
  • D – noise matrix

Output

Returns a vector containing the discretized input arguments A, B, c and D.

Notes

See discretize for more details.

source
_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

Input

  • A – state matrix
  • ΔT – sampling time
  • algorithm – (optional, default: :exact) discretization algorithm

Output

Returns a vector containing the discretized input argument A.

Notes

See discretize for more details.

source
_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
+            A::AbstractMatrix, B::AbstractMatrix)

Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

Input

  • algorithm – discretization algorithm
  • ΔT – sampling time
  • A – state matrix
  • B – input or noise matrix

Output

Returns a vector containing the discretized input arguments A and B.

Notes

This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

See discretize for more details.

source
_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
+            A::AbstractMatrix,c::AbstractVector)

Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

Input

  • algorithm – discretization algorithm
  • ΔT – sampling time
  • A – state matrix
  • c – vector

Output

Returns a vector containing the discretized input arguments A and c.

Notes

See discretize for more details.

source
_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
+            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

Input

  • algorithm – discretization algorithm
  • ΔT – sampling time
  • A – state matrix
  • B – input matrix
  • c – vector

Output

Returns a vector containing the discretized input arguments A, B and c.

Notes

See discretize for more details.

source
_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
+            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

Input

  • algorithm – discretization algorithm
  • ΔT – sampling time
  • A – state matrix
  • B – input matrix
  • D – noise matrix

Output

Returns a vector containing the discretized input arguments A, B and D.

Notes

See discretize for more details.

source
MathematicalSystems.typenameMethod
typename(system::AbstractSystem)

Returns the base type of system without parameter information.

Input

  • systemAbstractSystem

Output

The base type of system.

source
MathematicalSystems._complementary_typeMethod
_complementary_type(system_type::Type{<:AbstractSystem})

Return the complementary type of a system type system_type.

Input

  • system_type – type of AbstractSystem

Output

The complementary type of system_type.

Notes

There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

To get the complementary type of system type, use _complementary_type(typename(system)).

source
diff --git a/dev/lib/types/index.html b/dev/lib/types/index.html new file mode 100644 index 00000000..4c87cd85 --- /dev/null +++ b/dev/lib/types/index.html @@ -0,0 +1,125 @@ + +Types · MathematicalSystems.jl

Types

This section describes systems types implemented in MathematicalSystems.jl.

Abstract Systems

Continuous Systems

MathematicalSystems.ConstrainedContinuousIdentitySystemType
ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

Trivial identity continuous-time system with domain constraints of the form:

\[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

Fields

  • statedim – number of state variables
  • X – state constraints
source
MathematicalSystems.ConstrainedAffineControlContinuousSystemType
ConstrainedAffineControlContinuousSystem

Continuous-time affine control system with domain constraints of the form:

\[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ConstrainedLinearControlContinuousSystemType
ConstrainedLinearControlContinuousSystem

Continuous-time linear control system with domain constraints of the form:

\[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ConstrainedPolynomialContinuousSystemType
ConstrainedPolynomialContinuousSystem

Continuous-time polynomial system with domain constraints:

\[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

Fields

  • p – polynomial vector field
  • X – constraint set
  • statedim – number of state variables
source
MathematicalSystems.BlackBoxContinuousSystemType
BlackBoxContinuousSystem <: AbstractContinuousSystem

Continuous-time system defined by a right-hand side of the form:

\[ x(t)' = f(x(t)) \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
source
MathematicalSystems.ConstrainedBlackBoxContinuousSystemType
ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

Continuous-time system defined by a right-hand side with domain constraints of the form:

\[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • X – state constraints
source
MathematicalSystems.BlackBoxControlContinuousSystemType
BlackBoxControlContinuousSystem <: AbstractContinuousSystem

Continuous-time control system defined by a right-hand side of the form:

\[ x(t)' = f(x(t), u(t)) \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
source
MathematicalSystems.ConstrainedBlackBoxControlContinuousSystemType
ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

Continuous-time control system defined by a right-hand side with domain constraints of the form:

\[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.NoisyConstrainedLinearContinuousSystemType
NoisyConstrainedLinearContinuousSystem

Continuous-time linear system with additive disturbance and domain constraints of the form:

\[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

Fields

  • A – state matrix
  • D – noise matrix
  • X – state constraints
  • W – disturbance set
source
MathematicalSystems.NoisyConstrainedLinearControlContinuousSystemType
NoisyConstrainedLinearControlContinuousSystem

Continuous-time linear control system with additive disturbance and domain constraints of the form:

\[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • D – noise matrix
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.NoisyAffineControlContinuousSystemType
NoisyAffineControlContinuousSystem

Continuous-time affine control system with additive disturbance of the form:

\[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • D – noise matrix
source
MathematicalSystems.NoisyConstrainedAffineControlContinuousSystemType
NoisyConstrainedAffineControlContinuousSystem

Continuous-time affine control system with additive disturbance and domain constraints of the form:

\[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • D – noise matrix
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.NoisyBlackBoxControlContinuousSystemType
NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

Continuous-time disturbance-affected control system defined by a right-hand side of the form:

\[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • noisedim – number of noise variables
source
MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystemType
NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

\[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • noisedim – number of noise variables
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystemType
SecondOrderConstrainedAffineControlContinuousSystem

Continuous-time second order constrained affine control system of the form:

\[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t) + d, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • K – stiffness matrix
  • B – input matrix
  • d – affine term
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystemType
SecondOrderConstrainedLinearControlContinuousSystem

Continuous-time second order constrained linear control system of the form:

\[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • K – stiffness matrix
  • B – input matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.SecondOrderContinuousSystemType
SecondOrderContinuousSystem

Continuous-time second-order system of the form:

\[ Mx''(t) + Cx'(t) + f_i(x) = f_e(t) \forall t\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • fi – internal forces
  • fe – external forces

Notes

Typically fi(x) is a state-dependent function, and fe is a given vector. In this implementation, their respective types, FI and FE, are generic.

source
MathematicalSystems.SecondOrderConstrainedContinuousSystemType
SecondOrderConstrainedContinuousSystem

Continuous-time constrained second-order system of the form:

\[ Mx''(t) + Cx'(t) + f_i(x) = f_e(t) \forall t, x ∈ X, f_e(t) ∈ U\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • fi – internal forces
  • fe – external forces
  • X – state set
  • U – input set
source

Discrete Systems

MathematicalSystems.ConstrainedDiscreteIdentitySystemType
ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

Trivial identity discrete-time system with domain constraints of the form:

\[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

Fields

  • statedim – number of state variables
  • X – state constraints
source
MathematicalSystems.ConstrainedAffineDiscreteSystemType
ConstrainedAffineDiscreteSystem

Discrete-time affine system with domain constraints of the form:

\[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

Fields

  • A – state matrix
  • c – affine term
  • X – state constraints
source
MathematicalSystems.ConstrainedLinearControlDiscreteSystemType
ConstrainedLinearControlDiscreteSystem

Discrete-time linear control system with domain constraints of the form:

\[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ConstrainedAffineControlDiscreteSystemType
ConstrainedAffineControlDiscreteSystem

Continuous-time affine control system with domain constraints of the form:

\[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.BlackBoxDiscreteSystemType
BlackBoxDiscreteSystem <: AbstractDiscreteSystem

Discrete-time system defined by a right-hand side of the form:

\[ x_{k+1} = f(x_k) \; \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
source
MathematicalSystems.ConstrainedBlackBoxDiscreteSystemType
ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

Discrete-time system defined by a right-hand side with domain constraints of the form:

\[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • X – state constraints
source
MathematicalSystems.BlackBoxControlDiscreteSystemType
BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

Discrete-time control system defined by a right-hand side of the form:

\[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
source
MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystemType
ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

Discrete-time control system defined by a right-hand side with domain constraints of the form:

\[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.NoisyConstrainedLinearDiscreteSystemType
NoisyConstrainedLinearDiscreteSystem

Discrete-time linear system with additive disturbance and domain constraints of the form:

\[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

Fields

  • A – state matrix
  • D – noise matrix
  • X – state constraints
  • W – disturbance set
source
MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystemType
NoisyConstrainedLinearControlDiscreteSystem

Continuous-time linear control system with additive disturbance and domain constraints of the form:

\[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • D – noise matrix
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.NoisyAffineControlDiscreteSystemType
NoisyAffineControlDiscreteSystem

Continuous-time affine control system with additive disturbance of the form:

\[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • D – noise matrix
source
MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystemType
NoisyConstrainedAffineControlDiscreteSystem

Continuous-time affine control system with additive disturbance and domain constraints of the form:

\[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • D – noise matrix
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.NoisyBlackBoxControlDiscreteSystemType
NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

Discrete-time disturbance-affected control system defined by a right-hand side of the form:

\[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • noisedim – number of noise variables
source
MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystemType
NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

\[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • noisedim – number of noise variables
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystemType
SecondOrderConstrainedAffineControlDiscreteSystem

Discrete-time second order constrained affine control system of the form:

\[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k + d, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • K – stiffness matrix
  • B – input matrix
  • d – affine term
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystemType
SecondOrderConstrainedLinearControlDiscreteSystem

Discrete-time second order constrained linear control system of the form:

\[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • K – stiffness matrix
  • B – input matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.SecondOrderDiscreteSystemType
SecondOrderDiscreteSystem

Discrete-time second-order system of the form:

\[ Mx_{k+2} + Cx_{k} + f_i(x_k) = f_e(t_k) \forall k.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • fi – internal forces
  • fe – external forces

Notes

Typically fi(x_k) is a state-dependent function, and fe is a given vector. In this implementation, their respective types, FI and FE, are generic.

source
MathematicalSystems.SecondOrderConstrainedDiscreteSystemType
SecondOrderConstrainedDiscreteSystem

Discrete-time constrained second-order system of the form:

\[ Mx_{k+2} + Cx_{k} + f_i(x_k) = f_e(t_k) \forall k, x_k ∈ X, f_e(t_k) ∈ U\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • fi – internal forces
  • fe – external forces
  • X – state set
  • U – input set
source

Discretization Algorithms

MathematicalSystems.AbstractDiscretizationAlgorithmType
AbstractDiscretizationAlgorithm

Abstract supertype for all discretization algorithms.

Note

For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

_discretize(::NewDiscretizationAlgorithm, ΔT::Real,
+             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

are required.

source
MathematicalSystems.ExactDiscretizationType
ExactDiscretization <: AbstractDiscretizationAlgorithm

Exact discretization algorithm for affine systems.

Algorithm

This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

The algorithm described above is a well known result from the literature [1].

[1] Wikipedia

source
MathematicalSystems.EulerDiscretizationType
EulerDiscretization <: AbstractDiscretizationAlgorithm

Euler discretization algorithm for affine systems.

Algorithm

This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

The algorithm described above is a well-known result from the literature [1].

[1] Wikipedia

source

Initial Value Problems

MathematicalSystems.InitialValueProblemType
InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

Fields

  • s – system
  • x0 – initial state

Examples

The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
+
+julia> x₀ = [-1/2, 1/2];
+
+julia> p = InitialValueProblem(s, x₀);
+
+julia> initial_state(p) # same as p.x0
+2-element Vector{Float64}:
+ -0.5
+  0.5
+
+julia> statedim(p)
+2
+
+julia> inputdim(p)
+0
source
MathematicalSystems.initial_stateFunction
initial_state(ivp::InitialValueProblem)

Return the initial state of an initial-value problem.

Input

  • ivp – initial-value problem

Output

The initial state of an initial-value problem.

source
MathematicalSystems.systemFunction
system(ivp::InitialValueProblem)

Return the system wrapped by an initial-value problem.

Input

  • ivp – initial-value problem

Output

The system of the given initial-value problem.

source

Identity Operator

MathematicalSystems.IdentityMultipleType
IdentityMultiple{T} < AbstractMatrix{T} where T

A scalar multiple of the identity matrix of given order and numeric type.

Fields

  • M – uniform scaling operator of type T
  • n – size of the identity matrix

Notes

This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatrix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

Examples

Only specifying the matrix size represents an identity matrix:

julia> using MathematicalSystems: IdentityMultiple
+
+julia> I2 = Id(2)
+IdentityMultiple{Float64} of value 1.0 and order 2
+
+julia> I2 + I2
+IdentityMultiple{Float64} of value 2.0 and order 2
+
+julia> 4*I2
+IdentityMultiple{Float64} of value 4.0 and order 2

The scaling (default 1.0) can be passed as the second argument:

julia> I2r = Id(2, 1//1)
+IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
+
+julia> I2r + I2r
+IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
+
+julia> 4*I2r
+IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

Alternatively, use the constructor passing the UniformScaling (I):

julia> using LinearAlgebra
+
+julia> I2 = IdentityMultiple(2.0*I, 2)
+IdentityMultiple{Float64} of value 2.0 and order 2
+
+julia> I2r = IdentityMultiple(2//1*I, 2)
+IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
source
MathematicalSystems.IdFunction
Id(n::Int, [λ]::Number=1.0)

Convenience constructor of an IdentityMultiple.

Input

  • n – dimension
  • λ – (optional; default: 1.0) scaling factor

Output

An IdentityMultiple of the given size and scaling factor.

source

Input Types

MathematicalSystems.AbstractInputType
AbstractInput

Abstract supertype for all input types.

Notes

The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

source
MathematicalSystems.ConstantInputType
ConstantInput{UT} <: AbstractInput

Type representing an input that remains constant in time.

Fields

  • U – input set

Examples

The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

julia> c = ConstantInput(-1//2)
+ConstantInput{Rational{Int64}}(-1//2)
+
+julia> iterate(c, 1)
+(-1//2, nothing)
+
+julia> iterate(c, 2)
+(-1//2, nothing)
+
+julia> collect(nextinput(c, 4))
+4-element Vector{Rational{Int64}}:
+ -1//2
+ -1//2
+ -1//2
+ -1//2

The elements of this input are rational numbers:

julia> eltype(c)
+Rational{Int64}

To transform a constant input, you can use map as in:

julia> map(x->2*x, c)
+ConstantInput{Rational{Int64}}(-1//1)
source
MathematicalSystems.VaryingInputType
VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

Type representing an input that may vary with time.

Fields

  • U – vector of input sets

Examples

The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

julia> v = VaryingInput([-1//2, 1//2])
+VaryingInput{Rational{Int64}, Vector{Rational{Int64}}}(Rational{Int64}[-1//2, 1//2])
+
+julia> length(v)
+2
+
+julia> eltype(v)
+Rational{Int64}

Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

julia> iterate(v, 1)
+(-1//2, 2)
+
+julia> iterate(v, 2)
+(1//2, 3)

The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

julia> typeof(nextinput(v))
+Base.Iterators.Take{VaryingInput{Rational{Int64}, Vector{Rational{Int64}}}}
+
+julia> collect(nextinput(v, 1))
+1-element Vector{Rational{Int64}}:
+ -1//2
+
+julia> collect(nextinput(v, 2))
+2-element Vector{Rational{Int64}}:
+ -1//2
+  1//2

You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

julia> collect(v)
+2-element Vector{Rational{Int64}}:
+ -1//2
+  1//2
+
+julia> [3*vi for vi in v]
+2-element Vector{Rational{Int64}}:
+ -3//2
+  3//2

Since this input type is finite, querying more elements than its length returns the full vector:

julia> collect(nextinput(v, 4))
+2-element Vector{Rational{Int64}}:
+ -1//2
+  1//2

To transform a varying input, you can use map as in:

julia> map(x->3*x, v)
+VaryingInput{Rational{Int64}, Vector{Rational{Int64}}}(Rational{Int64}[-3//2, 3//2])
source

Maps

MathematicalSystems.ConstrainedLinearControlMapType
ConstrainedLinearControlMap

A linear control map with state and input constraints

\[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

Fields

  • A – matrix
  • B – matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ConstrainedAffineControlMapType
ConstrainedAffineControlMap

An affine control map with state and input constraints

\[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

Fields

  • A – matrix
  • B – matrix
  • c – vector
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ResetMapType
ResetMap

A reset map

\[ x ↦ R(x),\]

such that a subset of the variables is given a specified value, and the rest are unchanged.

Fields

  • dim – dimension
  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
source
MathematicalSystems.ConstrainedResetMapType
ConstrainedResetMap

A reset map with state constraints of the form

\[ x ↦ R(x), x ∈ \mathcal{X},\]

such that the specified variables are assigned a given value, and the remaining variables are unchanged.

Fields

  • dim – dimension
  • X – state constraints
  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
source
MathematicalSystems.ConstrainedBlackBoxMapType
ConstrainedBlackBoxMap

A constrained black-box map of the form

\[ x ↦ h(x), x ∈ \mathcal{X}.\]

Fields

  • dim – state dimension
  • output_dim – output dimension
  • h – output function
  • X – state constraints
source
MathematicalSystems.BlackBoxControlMapType
BlackBoxControlMap

A black-box control map of the form

\[ (x, u) ↦ h(x, u).\]

Fields

  • dim – state dimension
  • input_dim – input dimension
  • output_dim – output dimension
  • h – output function
source
MathematicalSystems.ConstrainedBlackBoxControlMapType
ConstrainedBlackBoxControlMap

A constrained black-box control map of the form

\[ (x, u) ↦ h(x, u), x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

Fields

  • dim – state dimension
  • input_dim – input dimension
  • output_dim – output dimension
  • h – output function
  • X – state constraints
  • U – input constraints
source

Systems with Output

MathematicalSystems.SystemWithOutputType
SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem

Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

Fields

  • s – system of type ST
  • outputmap – output map of type MT
source
MathematicalSystems.LinearTimeInvariantSystemFunction
LinearTimeInvariantSystem(A, B, C, D)

A linear time-invariant system with of the form

\[x' = Ax + Bu,\\ +y = Cx + Du.\]

Input

  • A – matrix
  • B – matrix
  • C – matrix
  • D – matrix

Output

A system with output such that the system is a linear control continuous system and the output map is a linear control map.

source
LinearTimeInvariantSystem(A, B, C, D, X, U)

A linear time-invariant system with state and input constraints of the form

\[x' = Ax + Bu,\\ +y = Cx + Du,\]

where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

Input

  • A – matrix
  • B – matrix
  • C – matrix
  • D – matrix
  • X – state constraints
  • U – input constraints

Output

A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

source

Vector Fields

MathematicalSystems.VectorFieldType
VectorField{T<:Function}

Type that computes the vector field of an AbstractContinuousSystem.

Fields

  • field – function for calculating the vector field
source

Macros

MathematicalSystems.@systemMacro
system(expr...)

Return an instance of the system type corresponding to the given expressions.

Input

  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

Output

A system that best matches the given expressions.

Notes

Terms. The expression expr contains one or more of the following sub-expressions:

  • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
  • set constraints, e.g. x ∈ X
  • input constraints, e.g. u ∈ U
  • dimensionality, e.g. dim: (2,1) or dim = 1
  • specification of the input variable, e.g. input: u or input = u
  • specification of the noise variable, e,g, noise: w or noise = w

The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

Exceptions. The following exceptions and particular cases apply:

  • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

  • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic equation and hence gives rise to a descriptor system. In this case, the asterisk * operator is mandatory.

  • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

Examples

Let us first create a continuous linear system using this macro:

julia> A = [1. 0; 0 1.];
+
+julia> @system(x' = A*x)
+LinearContinuousSystem{Float64, Matrix{Float64}}([1.0 0.0; 0.0 1.0])

A discrete system is defined by using :

julia> @system(x⁺ = A*x)
+LinearDiscreteSystem{Float64, Matrix{Float64}}([1.0 0.0; 0.0 1.0])

Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

julia> using LazySets
+
+julia> B = Matrix([1.0 0.5]');
+
+julia> c = [1.0, 1.5];
+
+julia> X = BallInf(zeros(2), 10.0);
+
+julia> U = BallInf(zeros(1), 2.0);
+
+julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
+ConstrainedAffineControlContinuousSystem{Float64, Matrix{Float64}, Matrix{Float64}, Vector{Float64}, BallInf{Float64, Vector{Float64}}, BallInf{Float64, Vector{Float64}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5;;], [1.0, 1.5], BallInf{Float64, Vector{Float64}}([0.0, 0.0], 10.0), BallInf{Float64, Vector{Float64}}([0.0], 2.0))

For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

julia> f(x, u) = x + u;
+
+julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
+ConstrainedBlackBoxControlDiscreteSystem{typeof(f), BallInf{Float64, Vector{Float64}}, BallInf{Float64, Vector{Float64}}}(f, 2, 2, BallInf{Float64, Vector{Float64}}([0.0, 0.0], 10.0), BallInf{Float64, Vector{Float64}}([0.0], 2.0))
source
MathematicalSystems.@ivpMacro
ivp(expr...)

Return an instance of the initial-value problem type corresponding to the given expressions.

Input

  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

Output

An initial-value problem that best matches the given expressions.

Notes

This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

Examples

julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
+
+julia> typeof(p)
+InitialValueProblem{LinearContinuousSystem{Float64, IdentityMultiple{Float64}}, Vector{Float64}}
+
+julia> initial_state(p)
+1-element Vector{Float64}:
+ 1.0
+
+julia> sys = @system(x' = [1 0; 0 1] * x);
+
+julia> @ivp(sys, x(0) ∈ [-1, 1])
+InitialValueProblem{LinearContinuousSystem{Int64, Matrix{Int64}}, Vector{Int64}}(LinearContinuousSystem{Int64, Matrix{Int64}}([1 0; 0 1]), [-1, 1])
source
MathematicalSystems.@mapMacro
map(ex, args)

Return an instance of the map type corresponding to the given expression.

Input

  • ex – an expression defining the map, in the form of an anonymous function
  • args – additional optional arguments

Output

A map that best matches the given expression.

Examples

Let us first create a linear map using this macro:

julia> @map x -> [1 0; 0 0]*x
+LinearMap{Int64, Matrix{Int64}}([1 0; 0 0])

We can create an affine system as well:

julia> @map x -> [1 0; 0 0]*x + [2, 0]
+AffineMap{Int64, Matrix{Int64}, Vector{Int64}}([1 0; 0 0], [2, 0])

Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

julia> @map(x -> x, dim=5)
+IdentityMap(5)

A state constraint on such map can be specified passing the additional argument x ∈ X.

An identity map can alternatively be created by giving a the size of the identity matrix as Id(n), for example:

julia> @map x -> Id(5)*x
+IdentityMap(5)
source
diff --git a/dev/man/systems/index.html b/dev/man/systems/index.html new file mode 100644 index 00000000..fd1c5545 --- /dev/null +++ b/dev/man/systems/index.html @@ -0,0 +1,11 @@ + +Overview of System Types · MathematicalSystems.jl

Overview of System Types

Using the @system Macro

A convenient way to create a new system is with the @system macro. For example, the ODE $x'(t) = -2x(t)$ is simply x' = -2x, where $x'(t) := dx/dt$ is the derivative of state $x(t)$ with respect to "time":

using MathematicalSystems
+
+@system(x' = -2x)
LinearContinuousSystem{Float64, IdentityMultiple{Float64}}([-2.0;;])

We can also add state constraints, say $x(t) ≥ 0.5$,

using LazySets
+
+H = HalfSpace([-1.0], -0.5) # x >= 0.5
+@system(x' = -2x, x ∈ H)
ConstrainedLinearContinuousSystem{Float64, IdentityMultiple{Float64}, LazySets.HalfSpace{Float64, Vector{Float64}}}([-2.0;;], LazySets.HalfSpace{Float64, Vector{Float64}}([-1.0], -0.5))

Systems of ODEs can be defined using vector notation:

A = [1.0 0.0; -1.0 -2.0]
+B = Ball2(zeros(2), 1.0)
+c = [0.0, 5.0]
+@system(z' = A*z + c, z ∈ B)
ConstrainedAffineContinuousSystem{Float64, Matrix{Float64}, Vector{Float64}, LazySets.Ball2{Float64, Vector{Float64}}}([1.0 0.0; -1.0 -2.0], [0.0, 5.0], LazySets.Ball2{Float64, Vector{Float64}}([0.0, 0.0], 1.0))

which defines the two-dimensional system $x' = y$, $y' = -x - 2y + 3$, with state constraints $z ∈ B = \{ \sqrt{x^2 + y^2} \leq 5\}$.

Initial-value problems can be specified with the @ivp macro. For instance, we can attach an initial condition $z(0) = (0.2, 0.2])$ to the previous example:

S0 = Singleton([0.2, 0.2])
+@ivp(z' = A*z + c, z ∈ B, z(0) ∈ S0)
InitialValueProblem{ConstrainedAffineContinuousSystem{Float64, Matrix{Float64}, Vector{Float64}, LazySets.Ball2{Float64, Vector{Float64}}}, LazySets.Singleton{Float64, Vector{Float64}}}(ConstrainedAffineContinuousSystem{Float64, Matrix{Float64}, Vector{Float64}, LazySets.Ball2{Float64, Vector{Float64}}}([1.0 0.0; -1.0 -2.0], [0.0, 5.0], LazySets.Ball2{Float64, Vector{Float64}}([0.0, 0.0], 1.0)), LazySets.Singleton{Float64, Vector{Float64}}([0.2, 0.2]))

Inputs

In the examples introduced so far, the macro has automatically created different system types given a defining equation, either in scalar or in vector form, and state constraints. It is possible to define systems with additive input terms or noise terms, with constraints on the state, inputs or combinations of these. Other specific classes of systems such as descriptor, polynomial or general nonlinear systems given by a standard Julia function are available as well (see the tables below).

Some applications require distinguishing between controlled inputs and uncontrolled or noise inputs. In this library we make such distinction by noting field names with $u$ and $w$ for (controlled) inputs and noise respectively. Please note that some systems are structurally equivalent, for example CLCCS and NCLCS being $x' = Ax + Bu$ and $x' = Ax + Dw$ respectively; the difference lies in the resulting value of getter functions such as inputset and noiseset.

Summary Tables

The following table summarizes the different system types in abbreviated form. The abbreviated names are included here only for reference and are not exported. See the Types section of this manual, or simply click on the system's name for details on each type.

Please note that for each continuous system there is a corresponding discrete system, e.g. there is ConstrainedAffineContinuousSystem and ConstrainedAffineDiscreteSystem, etc. However in this table we only included continuous system types for brevity.

AbbreviationSystem type
CISContinuousIdentitySystem
CCISConstrainedContinuousIdentitySystem
LCSLinearContinuousSystem
ACSAffineContinuousSystem
LCCSLinearControlContinuousSystem
ACCSAffineControlContinuousSystem
CLCSConstrainedLinearContinuousSystem
CACSConstrainedAffineContinuousSystem
CACCSConstrainedAffineControlContinuousSystem
CLCCSConstrainedLinearControlContinuousSystem
LACSLinearDescriptorContinuousSystem
CLACSConstrainedLinearDescriptorContinuousSystem
PCSPolynomialContinuousSystem
CPCSPolynomialContinuousSystem
BBCSBlackBoxContinuousSystem
CBBCSConstrainedBlackBoxContinuousSystem
BBCCSBlackBoxControlContinuousSystem
CBBCCSConstrainedBlackBoxControlContinuousSystem
NLCSNoisyLinearContinuousSystem
NCLCSNoisyConstrainedLinearContinuousSystem
NLCCSNoisyLinearControlContinuousSystem
NCLCCSNoisyConstrainedLinearControlContinuousSystem
NACCSNoisyAffineControlContinuousSystem
NCALCCSNoisyConstrainedAffineControlContinuousSystem
NBBCCSNoisyBlackBoxControlContinuousSystem
NCBBCCSNoisyConstrainedBlackBoxControlContinuousSystem
SOLCSSecondOrderLinearContinuousSystem
SOACSSecondOrderAffineContinuousSystem
SOCACCSSecondOrderConstrainedAffineControlContinuousSystem
SOCLCCSSecondOrderConstrainedLinearControlContinuousSystem

The following table summarizes the equation represented by each system type (the names are given in abbreviated form). Again, discrete systems are not included. The column Input constraints is yes if the structure can model input or noise constraints (or both).

EquationState constraintsInput constraintsSystem type (abbr.)
$x' = 0$nonoCIS
$x' = 0, x ∈ X$yesnoCCIS
$x' = Ax$nonoLCS
$x' = Ax + c$nonoACS
$x' = Ax + Bu$nonoLCCS
$x' = Ax + Bu + c$nonoACCS
$x' = Ax, x ∈ X$yesnoCLCS
$x' = Ax + c, x ∈ X$yesnoCACS
$x' = Ax + Bu + c, x ∈ X, u ∈ U$yesyesCACCS
$x' = Ax + Bu, x ∈ X, u ∈ U$yesyesCLCCS
$Ex' = Ax$nonoLACS
$Ex' = Ax, x ∈ X$yesnoCLACS
$x' = p(x)$nonoPCS
$x' = p(x), x ∈ X$yesnoCPCS
$x' = f(x)$nonoBBCS
$x' = f(x), x ∈ X$yesnoCBBCS
$x' = f(x, u)$nonoBBCCS
$x' = f(x, u), x ∈ X, u ∈ U$yesyesCBBCCS
$x' = Ax + Dw$nonoNLCS
$x' = Ax + Dw, x ∈ X, w ∈ W$yesyesNCLCS
$x' = Ax + Bu + Dw$nonoNLCCS
$x' = Ax + Bu + Dw, x ∈ X, u ∈ U, w ∈ W$yesyesNCLCCS
$x' = Ax + Bu + c + Dw$nonoNACCS
$x' = Ax + Bu + c + Dw, x ∈ X, u ∈ U, w ∈ W$yesyesNCALCCS
$x' = f(x, u, w)$nonoNBBCCS
$x' = f(x, u, w), x ∈ X, u ∈ U, w ∈ W$yesyesNCBBCCS
$Mx'' + Cx' + Kx = 0$nonoSOLCS
$Mx'' + Cx' + Kx = b$nonoSOACS
$Mx'' + Cx' + Kx = Bu + d, x ∈ X, u ∈ U$yesyesSOCACCS
$Mx'' + Cx' + Kx = Bu, x ∈ X, u ∈ U$yesyesSOCLCCS
$Mx'' + Cx' + f_i(x) = f_e$nonoSOCS
$Mx'' + Cx' + f_i(x) = f_e$, x ∈ X, u ∈ U``yesyesSOCCS
diff --git a/dev/objects.inv b/dev/objects.inv new file mode 100644 index 00000000..bf183969 Binary files /dev/null and b/dev/objects.inv differ diff --git a/dev/search_index.js b/dev/search_index.js new file mode 100644 index 00000000..e5e7484d --- /dev/null +++ b/dev/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-Handling","page":"Internals","title":"Expression Handling","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\n_sort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continuous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._sort","page":"Internals","title":"MathematicalSystems._sort","text":"_sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> using MathematicalSystems: _sort\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> _sort(parameters, (:X, :U, :W))\n3-element Vector{Tuple{Any, Symbol}}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> _sort(parameters, (:A, :B, :c, :D))\n2-element Vector{Tuple{Any, Symbol}}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-Expressions","page":"Internals","title":"Querying Expressions","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Vector{Tuple{Any, Symbol}}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Vector{Tuple{Any, Symbol}}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Vector{Tuple{Any, Symbol}}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Evaluation-of-AbstractSystem-at-Given-State","page":"Internals","title":"Evaluation of AbstractSystem at Given State","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"_instantiate","category":"page"},{"location":"lib/internals/#MathematicalSystems._instantiate","page":"Internals","title":"MathematicalSystems._instantiate","text":"_instantiate(system::AbstractSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying one input.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-Convention-for-Systems'-Fields","page":"Internals","title":"Naming Convention for Systems' Fields","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About","page":"About","title":"About","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This project is synchronized with GitHub Actions such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to make all unit tests pass.","category":"page"},{"location":"about/","page":"About","title":"About","text":"To run the unit tests locally, you can do:","category":"page"},{"location":"about/","page":"About","title":"About","text":"julia> using Pkg\n\njulia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"man/systems/#Overview-of-System-Types","page":"Overview of System Types","title":"Overview of System Types","text":"","category":"section"},{"location":"man/systems/#Using-the-@system-Macro","page":"Overview of System Types","title":"Using the @system Macro","text":"","category":"section"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"A convenient way to create a new system is with the @system macro. For example, the ODE x(t) = -2x(t) is simply x' = -2x, where x(t) = dxdt is the derivative of state x(t) with respect to \"time\":","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"using MathematicalSystems\n\n@system(x' = -2x)","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"We can also add state constraints, say x(t) 05,","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"using LazySets\n\nH = HalfSpace([-1.0], -0.5) # x >= 0.5\n@system(x' = -2x, x ∈ H)","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Systems of ODEs can be defined using vector notation:","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"A = [1.0 0.0; -1.0 -2.0]\nB = Ball2(zeros(2), 1.0)\nc = [0.0, 5.0]\n@system(z' = A*z + c, z ∈ B)","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"which defines the two-dimensional system x = y, y = -x - 2y + 3, with state constraints z B = sqrtx^2 + y^2 leq 5.","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Initial-value problems can be specified with the @ivp macro. For instance, we can attach an initial condition z(0) = (02 02) to the previous example:","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"S0 = Singleton([0.2, 0.2])\n@ivp(z' = A*z + c, z ∈ B, z(0) ∈ S0)","category":"page"},{"location":"man/systems/#Inputs","page":"Overview of System Types","title":"Inputs","text":"","category":"section"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"In the examples introduced so far, the macro has automatically created different system types given a defining equation, either in scalar or in vector form, and state constraints. It is possible to define systems with additive input terms or noise terms, with constraints on the state, inputs or combinations of these. Other specific classes of systems such as descriptor, polynomial or general nonlinear systems given by a standard Julia function are available as well (see the tables below).","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Some applications require distinguishing between controlled inputs and uncontrolled or noise inputs. In this library we make such distinction by noting field names with u and w for (controlled) inputs and noise respectively. Please note that some systems are structurally equivalent, for example CLCCS and NCLCS being x = Ax + Bu and x = Ax + Dw respectively; the difference lies in the resulting value of getter functions such as inputset and noiseset.","category":"page"},{"location":"man/systems/#Summary-Tables","page":"Overview of System Types","title":"Summary Tables","text":"","category":"section"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"The following table summarizes the different system types in abbreviated form. The abbreviated names are included here only for reference and are not exported. See the Types section of this manual, or simply click on the system's name for details on each type.","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Please note that for each continuous system there is a corresponding discrete system, e.g. there is ConstrainedAffineContinuousSystem and ConstrainedAffineDiscreteSystem, etc. However in this table we only included continuous system types for brevity.","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Abbreviation System type\nCIS ContinuousIdentitySystem\nCCIS ConstrainedContinuousIdentitySystem\nLCS LinearContinuousSystem\nACS AffineContinuousSystem\nLCCS LinearControlContinuousSystem\nACCS AffineControlContinuousSystem\nCLCS ConstrainedLinearContinuousSystem\nCACS ConstrainedAffineContinuousSystem\nCACCS ConstrainedAffineControlContinuousSystem\nCLCCS ConstrainedLinearControlContinuousSystem\nLACS LinearDescriptorContinuousSystem\nCLACS ConstrainedLinearDescriptorContinuousSystem\nPCS PolynomialContinuousSystem\nCPCS PolynomialContinuousSystem\nBBCS BlackBoxContinuousSystem\nCBBCS ConstrainedBlackBoxContinuousSystem\nBBCCS BlackBoxControlContinuousSystem\nCBBCCS ConstrainedBlackBoxControlContinuousSystem\nNLCS NoisyLinearContinuousSystem\nNCLCS NoisyConstrainedLinearContinuousSystem\nNLCCS NoisyLinearControlContinuousSystem\nNCLCCS NoisyConstrainedLinearControlContinuousSystem\nNACCS NoisyAffineControlContinuousSystem\nNCALCCS NoisyConstrainedAffineControlContinuousSystem\nNBBCCS NoisyBlackBoxControlContinuousSystem\nNCBBCCS NoisyConstrainedBlackBoxControlContinuousSystem\nSOLCS SecondOrderLinearContinuousSystem\nSOACS SecondOrderAffineContinuousSystem\nSOCACCS SecondOrderConstrainedAffineControlContinuousSystem\nSOCLCCS SecondOrderConstrainedLinearControlContinuousSystem","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"The following table summarizes the equation represented by each system type (the names are given in abbreviated form). Again, discrete systems are not included. The column Input constraints is yes if the structure can model input or noise constraints (or both).","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Equation State constraints Input constraints System type (abbr.)\nx = 0 no no CIS\nx = 0 x X yes no CCIS\nx = Ax no no LCS\nx = Ax + c no no ACS\nx = Ax + Bu no no LCCS\nx = Ax + Bu + c no no ACCS\nx = Ax x X yes no CLCS\nx = Ax + c x X yes no CACS\nx = Ax + Bu + c x X u U yes yes CACCS\nx = Ax + Bu x X u U yes yes CLCCS\nEx = Ax no no LACS\nEx = Ax x X yes no CLACS\nx = p(x) no no PCS\nx = p(x) x X yes no CPCS\nx = f(x) no no BBCS\nx = f(x) x X yes no CBBCS\nx = f(x u) no no BBCCS\nx = f(x u) x X u U yes yes CBBCCS\nx = Ax + Dw no no NLCS\nx = Ax + Dw x X w W yes yes NCLCS\nx = Ax + Bu + Dw no no NLCCS\nx = Ax + Bu + Dw x X u U w W yes yes NCLCCS\nx = Ax + Bu + c + Dw no no NACCS\nx = Ax + Bu + c + Dw x X u U w W yes yes NCALCCS\nx = f(x u w) no no NBBCCS\nx = f(x u w) x X u U w W yes yes NCBBCCS\nMx + Cx + Kx = 0 no no SOLCS\nMx + Cx + Kx = b no no SOACS\nMx + Cx + Kx = Bu + d x X u U yes yes SOCACCS\nMx + Cx + Kx = Bu x X u U yes yes SOCLCCS\nMx + Cx + f_i(x) = f_e no no SOCS\nMx + Cx + f_i(x) = f_e, x ∈ X, u ∈ U`` yes yes SOCCS","category":"page"},{"location":"lib/types/#Types","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nAffineControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearDescriptorContinuousSystem\nConstrainedLinearDescriptorContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem\nSecondOrderLinearContinuousSystem\nSecondOrderAffineContinuousSystem\nSecondOrderConstrainedAffineControlContinuousSystem\nSecondOrderConstrainedLinearControlContinuousSystem\nSecondOrderContinuousSystem\nSecondOrderConstrainedContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.AffineControlContinuousSystem","text":"AffineControlContinuousSystem\n\nContinuous-time affine control system of the form:\n\n x(t) = A x(t) + B u(t) + c forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDescriptorContinuousSystem","page":"Types","title":"MathematicalSystems.LinearDescriptorContinuousSystem","text":"LinearDescriptorContinuousSystem\n\nContinuous-time linear descriptor system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDescriptorContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDescriptorContinuousSystem","text":"ConstrainedLinearDescriptorContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearContinuousSystem","text":"SecondOrderLinearContinuousSystem\n\nContinuous-time second order linear system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = 0 forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineContinuousSystem","text":"SecondOrderAffineContinuousSystem\n\nContinuous-time second order affine system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = b forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","text":"SecondOrderConstrainedAffineControlContinuousSystem\n\nContinuous-time second order constrained affine control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t) + d  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","text":"SecondOrderConstrainedLinearControlContinuousSystem\n\nContinuous-time second order constrained linear control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderContinuousSystem","text":"SecondOrderContinuousSystem\n\nContinuous-time second-order system of the form:\n\n Mx(t) + Cx(t) + f_i(x) = f_e(t) forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nfi – internal forces\nfe – external forces\n\nNotes\n\nTypically fi(x) is a state-dependent function, and fe is a given vector. In this implementation, their respective types, FI and FE, are generic.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedContinuousSystem","text":"SecondOrderConstrainedContinuousSystem\n\nContinuous-time constrained second-order system of the form:\n\n Mx(t) + Cx(t) + f_i(x) = f_e(t) forall t x X f_e(t) U\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nfi – internal forces\nfe – external forces\nX – state set\nU – input set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nAffineControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearDescriptorDiscreteSystem\nConstrainedLinearDescriptorDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem\nSecondOrderLinearDiscreteSystem\nSecondOrderAffineDiscreteSystem\nSecondOrderConstrainedAffineControlDiscreteSystem\nSecondOrderConstrainedLinearControlDiscreteSystem\nSecondOrderDiscreteSystem\nSecondOrderConstrainedDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineControlDiscreteSystem","text":"AffineControlDiscreteSystem\n\nContinuous-time affine control system of the form:\n\n x_k+1 = A x_k + B u_k + c forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDescriptorDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDescriptorDiscreteSystem","text":"LinearDescriptorDiscreteSystem\n\nDiscrete-time linear descriptor system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDescriptorDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDescriptorDiscreteSystem","text":"ConstrainedLinearDescriptorDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearDiscreteSystem","text":"SecondOrderLinearDiscreteSystem\n\nDiscrete-time second order linear system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = 0 forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineDiscreteSystem","text":"SecondOrderAffineDiscreteSystem\n\nDiscrete-time second order affine system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = b forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","text":"SecondOrderConstrainedAffineControlDiscreteSystem\n\nDiscrete-time second order constrained affine control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k + d  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","text":"SecondOrderConstrainedLinearControlDiscreteSystem\n\nDiscrete-time second order constrained linear control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderDiscreteSystem","text":"SecondOrderDiscreteSystem\n\nDiscrete-time second-order system of the form:\n\n Mx_k+2 + Cx_k + f_i(x_k) = f_e(t_k) forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nfi – internal forces\nfe – external forces\n\nNotes\n\nTypically fi(x_k) is a state-dependent function, and fe is a given vector. In this implementation, their respective types, FI and FE, are generic.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedDiscreteSystem","text":"SecondOrderConstrainedDiscreteSystem\n\nDiscrete-time constrained second-order system of the form:\n\n Mx_k+2 + Cx_k + f_i(x_k) = f_e(t_k) forall k x_k X f_e(t_k) U\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nfi – internal forces\nfe – external forces\nX – state set\nU – input set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] Wikipedia\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well-known result from the literature [1].\n\n[1] Wikipedia\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Vector{Float64}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Identity-Operator","page":"Types","title":"Identity Operator","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"IdentityMultiple\nId","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatrix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nOnly specifying the matrix size represents an identity matrix:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = Id(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe scaling (default 1.0) can be passed as the second argument:\n\njulia> I2r = Id(2, 1//1)\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nAlternatively, use the constructor passing the UniformScaling (I):\n\njulia> using LinearAlgebra\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.Id","page":"Types","title":"MathematicalSystems.Id","text":"Id(n::Int, [λ]::Number=1.0)\n\nConvenience constructor of an IdentityMultiple.\n\nInput\n\nn – dimension\nλ – (optional; default: 1.0) scaling factor\n\nOutput\n\nAn IdentityMultiple of the given size and scaling factor.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Vector{Rational{Int64}}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64}, Vector{Rational{Int64}}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64}, Vector{Rational{Int64}}}}\n\njulia> collect(nextinput(v, 1))\n1-element Vector{Rational{Int64}}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Vector{Rational{Int64}}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Vector{Rational{Int64}}:\n -1//2\n 1//2\n\njulia> [3*vi for vi in v]\n2-element Vector{Rational{Int64}}:\n -3//2\n 3//2\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Vector{Rational{Int64}}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->3*x, v)\nVaryingInput{Rational{Int64}, Vector{Rational{Int64}}}(Rational{Int64}[-3//2, 3//2])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap\nBlackBoxMap\nConstrainedBlackBoxMap\nBlackBoxControlMap\nConstrainedBlackBoxControlMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form\n\n x x x mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form\n\n x Ax x mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form\n\n x Ax + c x mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxMap","page":"Types","title":"MathematicalSystems.BlackBoxMap","text":"BlackBoxMap\n\nA black-box map of the form\n\n x h(x)\n\nFields\n\ndim – state dimension\noutput_dim – output dimension\nh – output function\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxMap","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxMap","text":"ConstrainedBlackBoxMap\n\nA constrained black-box map of the form\n\n x h(x) x mathcalX\n\nFields\n\ndim – state dimension\noutput_dim – output dimension\nh – output function\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlMap","page":"Types","title":"MathematicalSystems.BlackBoxControlMap","text":"BlackBoxControlMap\n\nA black-box control map of the form\n\n (x u) h(x u)\n\nFields\n\ndim – state dimension\ninput_dim – input dimension\noutput_dim – output dimension\nh – output function\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlMap","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlMap","text":"ConstrainedBlackBoxControlMap\n\nA constrained black-box control map of the form\n\n (x u) h(x u) x mathcalX u mathcalU\n\nFields\n\ndim – state dimension\ninput_dim – input dimension\noutput_dim – output dimension\nh – output function\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Systems-with-Output","page":"Types","title":"Systems with Output","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Vector-Fields","page":"Types","title":"Vector Fields","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"VectorField","category":"page"},{"location":"lib/types/#MathematicalSystems.VectorField","page":"Types","title":"MathematicalSystems.VectorField","text":"VectorField{T<:Function}\n\nType that computes the vector field of an AbstractContinuousSystem.\n\nFields\n\nfield – function for calculating the vector field\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"@system\n@ivp\n@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic equation and hence gives rise to a descriptor system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64, Matrix{Float64}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64, Matrix{Float64}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1.0 0.5]');\n\njulia> c = [1.0, 1.5];\n\njulia> X = BallInf(zeros(2), 10.0);\n\njulia> U = BallInf(zeros(1), 2.0);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64, Matrix{Float64}, Matrix{Float64}, Vector{Float64}, BallInf{Float64, Vector{Float64}}, BallInf{Float64, Vector{Float64}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5;;], [1.0, 1.5], BallInf{Float64, Vector{Float64}}([0.0, 0.0], 10.0), BallInf{Float64, Vector{Float64}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f), BallInf{Float64, Vector{Float64}}, BallInf{Float64, Vector{Float64}}}(f, 2, 2, BallInf{Float64, Vector{Float64}}([0.0, 0.0], 10.0), BallInf{Float64, Vector{Float64}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64, IdentityMultiple{Float64}}, Vector{Float64}}\n\njulia> initial_state(p)\n1-element Vector{Float64}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64, Matrix{Int64}}, Vector{Int64}}(LinearContinuousSystem{Int64, Matrix{Int64}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64, Matrix{Int64}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64, Matrix{Int64}, Vector{Int64}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nA state constraint on such map can be specified passing the additional argument x ∈ X.\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as Id(n), for example:\n\njulia> @map x -> Id(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"#MathematicalSystems.jl","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features","page":"Home","title":"Features","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, descriptor systems, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Ecosystem","page":"Home","title":"Ecosystem","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The following packages use MathematicalSystems.jl:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Dionysos.jl – Optimal control of cyber-physical systems\nHybridSystems.jl – Hybrid Systems definitions in Julia\nReachabilityAnalysis.jl – Methods to compute sets of states reachable by dynamical systems\nSpaceExParser.jl – SpaceEx modeling language parser\nStructuralDynamicsODESolvers.jl – Numerical integration methods for structural dynamics problems\nSwitchOnSafety.jl – Computing controlled invariant sets of Hybrid Systems using Sum Of Squares Programming","category":"page"},{"location":"#Manual-Outline","page":"Home","title":"Manual Outline","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\n \"man/systems.md\"\n]\nDepth = 2","category":"page"},{"location":"#Library-Outline","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Noises","page":"Methods","title":"Noises","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"noisedim\nnoiseset","category":"page"},{"location":"lib/methods/#MathematicalSystems.noisedim","page":"Methods","title":"MathematicalSystems.noisedim","text":"noisedim(s::AbstractSystem)\n\nReturns the dimension of the noise space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.noiseset","page":"Methods","title":"MathematicalSystems.noiseset","text":"noiseset(s::AbstractSystem)\n\nReturns the set of allowed noises of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::AbstractSystem)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisblackbox(::AbstractSystem)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isblackbox-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isblackbox","text":"isblackbox(s::AbstractSystem)\n\nSpecifies if no specific structure is assumed for the dynamics of system s.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(s::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(s::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(s::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(s::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Vector-Field","page":"Methods","title":"Vector Field","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"vector_field","category":"page"},{"location":"lib/methods/#MathematicalSystems.vector_field","page":"Methods","title":"MathematicalSystems.vector_field","text":"vector_field(system::ContinuousIdentitySystem, x::AbstractVector)\n\nReturn the vector field state of a ContinuousIdentitySystem.\n\nInput\n\nsystem – ContinuousIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of a ConstrainedContinuousIdentitySystem.\n\nInput\n\nsystem – ConstrainedContinuousIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{<:AbstractSystem}}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOutput\n\nThe complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/dev/siteinfo.js b/dev/siteinfo.js new file mode 100644 index 00000000..33434919 --- /dev/null +++ b/dev/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "dev"; diff --git a/index.html b/index.html new file mode 100644 index 00000000..6a5afc30 --- /dev/null +++ b/index.html @@ -0,0 +1,2 @@ + + diff --git a/latest b/latest new file mode 120000 index 00000000..90012116 --- /dev/null +++ b/latest @@ -0,0 +1 @@ +dev \ No newline at end of file diff --git a/previews/PR306/.documenter-siteinfo.json b/previews/PR306/.documenter-siteinfo.json new file mode 100644 index 00000000..8107d4e3 --- /dev/null +++ b/previews/PR306/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-07-28T12:28:33","documenter_version":"1.5.0"}} \ No newline at end of file diff --git a/previews/PR306/about/index.html b/previews/PR306/about/index.html new file mode 100644 index 00000000..85d6f5ad --- /dev/null +++ b/previews/PR306/about/index.html @@ -0,0 +1,4 @@ + +About · MathematicalSystems.jl

About

This page contains some general information about this project, and recommendations about contributing.

Contributing

If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

Branches and pull requests (PR)

We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

Unit testing and continuous integration (CI)

This project is synchronized with GitHub Actions such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to make all unit tests pass.

To run the unit tests locally, you can do:

julia> using Pkg
+
+julia> Pkg.test("MathematicalSystems")

We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

Contributing to the documentation

New functions and types should be documented according to our guidelines directly in the source code.

You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

julia> ?LinearContinuousSystem

This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

$ julia --color=yes docs/make.jl

Note that this also runs all doctests which will take some time.

This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

Below we list more related projects.

Package nameDescription
HybridSystems.jlHybrid Systems definitions in Julia.
LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
ControlToolbox.jlAnalysis and design tools for control systems.
ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
ControlSystems.jlA Control Systems Toolbox for Julia
ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

Credits

These persons have contributed to MathematicalSystems.jl (in alphabetic order):

diff --git a/previews/PR306/assets/aligned.css b/previews/PR306/assets/aligned.css new file mode 100644 index 00000000..0078e6bb --- /dev/null +++ b/previews/PR306/assets/aligned.css @@ -0,0 +1,3 @@ +p { + text-align: justify +} diff --git a/previews/PR306/assets/documenter.js b/previews/PR306/assets/documenter.js new file mode 100644 index 00000000..b2bdd43e --- /dev/null +++ b/previews/PR306/assets/documenter.js @@ -0,0 +1,1059 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function (event) { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + let animationSpeed = event.noToggleAnimation ? 0 : 400; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(animationSpeed); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(animationSpeed); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); + + if (meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + noToggleAnimation: true, + }); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + + word = word.toLowerCase(); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * RegX escape function from MDN + * Refer: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
`; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + searchstring = escapeRegExp(querystring); + let textindex = new RegExp(`${searchstring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(searchstring)}`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
+
${escape(result.title)}
+
${result.category}
+
+

+ ${display_result} +

+
+ ${display_link} +
+
+ ${search_divider} + `; + + return result_div; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + combineWith: "AND", + }); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! +const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), +]; +const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; +const worker_blob = new Blob([worker_str], { type: "text/javascript" }); +const worker = new Worker(URL.createObjectURL(worker_blob)); + +/////// SEARCH MAIN /////// + +// Whether the worker is currently handling a search. This is a boolean +// as the worker only ever handles 1 or 0 searches at a time. +var worker_is_running = false; + +// The last search text that was sent to the worker. This is used to determine +// if the worker should be launched again when it reports back results. +var last_search_text = ""; + +// The results of the last search. This, in combination with the state of the filters +// in the DOM, is used compute the results to display on calls to update_search. +var unfiltered_results = []; + +// Which filter is currently selected +var selected_filter = ""; + +$(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } +}); + +function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); +} + +worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } + + unfiltered_results = e.data; + update_search(); +}; + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; + } else { + selected_filter = $(this).text().toLowerCase(); + } + + // This updates search results and toggles classes for UI: + update_search(); +}); + +/** + * Make/Update the search component + */ +function update_search() { + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } + + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
`; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
${count_str}
`; + + search_result_container = ` +
+ ${modal_filters} + ${search_divider} + ${result_count} +
+ ${search_results} +
+
+ `; + } else { + search_result_container = ` +
+ ${modal_filters} + ${search_divider} +
0 result(s)
+
+
No result found!
+ `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
Type something to get started!
+ `); + } +} + +/** + * Make the modal filter html + * + * @returns string + */ +function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
+ Filters: + ${str} +
`; +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let search_modal_header = ` + + `; + + let initial_search_body = ` +
Type something to get started!
+ `; + + let search_modal_footer = ` + + `; + + $(document.body).append( + ` + + ` + ); + + document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); + }); + + document + .querySelector(".close-search-modal") + .addEventListener("click", () => { + closeModal(); + }); + + $(document).on("click", ".search-result-link", function () { + closeModal(); + }); + + document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; + }); + + // Functions to open and close a modal + function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); + } + + function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
Type something to get started!
+ `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); + } + + document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/previews/PR306/assets/logo.png b/previews/PR306/assets/logo.png new file mode 100644 index 00000000..b2a163b0 Binary files /dev/null and b/previews/PR306/assets/logo.png differ diff --git a/previews/PR306/assets/themes/catppuccin-frappe.css b/previews/PR306/assets/themes/catppuccin-frappe.css new file mode 100644 index 00000000..54a5b77e --- /dev/null +++ b/previews/PR306/assets/themes/catppuccin-frappe.css @@ -0,0 +1 @@ +html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe .file-name,html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-frappe .pagination-previous:focus,html.theme--catppuccin-frappe .pagination-next:focus,html.theme--catppuccin-frappe .pagination-link:focus,html.theme--catppuccin-frappe .pagination-ellipsis:focus,html.theme--catppuccin-frappe .file-cta:focus,html.theme--catppuccin-frappe .file-name:focus,html.theme--catppuccin-frappe .select select:focus,html.theme--catppuccin-frappe .textarea:focus,html.theme--catppuccin-frappe .input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-frappe .button:focus,html.theme--catppuccin-frappe .is-focused.pagination-previous,html.theme--catppuccin-frappe .is-focused.pagination-next,html.theme--catppuccin-frappe .is-focused.pagination-link,html.theme--catppuccin-frappe .is-focused.pagination-ellipsis,html.theme--catppuccin-frappe .is-focused.file-cta,html.theme--catppuccin-frappe .is-focused.file-name,html.theme--catppuccin-frappe .select select.is-focused,html.theme--catppuccin-frappe .is-focused.textarea,html.theme--catppuccin-frappe .is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-focused.button,html.theme--catppuccin-frappe .pagination-previous:active,html.theme--catppuccin-frappe .pagination-next:active,html.theme--catppuccin-frappe .pagination-link:active,html.theme--catppuccin-frappe .pagination-ellipsis:active,html.theme--catppuccin-frappe .file-cta:active,html.theme--catppuccin-frappe .file-name:active,html.theme--catppuccin-frappe .select select:active,html.theme--catppuccin-frappe .textarea:active,html.theme--catppuccin-frappe .input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-frappe .button:active,html.theme--catppuccin-frappe .is-active.pagination-previous,html.theme--catppuccin-frappe .is-active.pagination-next,html.theme--catppuccin-frappe .is-active.pagination-link,html.theme--catppuccin-frappe .is-active.pagination-ellipsis,html.theme--catppuccin-frappe .is-active.file-cta,html.theme--catppuccin-frappe .is-active.file-name,html.theme--catppuccin-frappe .select select.is-active,html.theme--catppuccin-frappe .is-active.textarea,html.theme--catppuccin-frappe .is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .is-active.button{outline:none}html.theme--catppuccin-frappe .pagination-previous[disabled],html.theme--catppuccin-frappe .pagination-next[disabled],html.theme--catppuccin-frappe .pagination-link[disabled],html.theme--catppuccin-frappe .pagination-ellipsis[disabled],html.theme--catppuccin-frappe .file-cta[disabled],html.theme--catppuccin-frappe .file-name[disabled],html.theme--catppuccin-frappe .select select[disabled],html.theme--catppuccin-frappe .textarea[disabled],html.theme--catppuccin-frappe .input[disabled],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-frappe .button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-frappe .file-name,html.theme--catppuccin-frappe fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-frappe .select select,fieldset[disabled] html.theme--catppuccin-frappe .textarea,fieldset[disabled] html.theme--catppuccin-frappe .input,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe fieldset[disabled] .select select,html.theme--catppuccin-frappe .select fieldset[disabled] select,html.theme--catppuccin-frappe fieldset[disabled] .textarea,html.theme--catppuccin-frappe fieldset[disabled] .input,html.theme--catppuccin-frappe fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-frappe .button,html.theme--catppuccin-frappe fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-frappe .tabs,html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .breadcrumb,html.theme--catppuccin-frappe .file,html.theme--catppuccin-frappe .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-frappe .admonition:not(:last-child),html.theme--catppuccin-frappe .tabs:not(:last-child),html.theme--catppuccin-frappe .pagination:not(:last-child),html.theme--catppuccin-frappe .message:not(:last-child),html.theme--catppuccin-frappe .level:not(:last-child),html.theme--catppuccin-frappe .breadcrumb:not(:last-child),html.theme--catppuccin-frappe .block:not(:last-child),html.theme--catppuccin-frappe .title:not(:last-child),html.theme--catppuccin-frappe .subtitle:not(:last-child),html.theme--catppuccin-frappe .table-container:not(:last-child),html.theme--catppuccin-frappe .table:not(:last-child),html.theme--catppuccin-frappe .progress:not(:last-child),html.theme--catppuccin-frappe .notification:not(:last-child),html.theme--catppuccin-frappe .content:not(:last-child),html.theme--catppuccin-frappe .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .modal-close,html.theme--catppuccin-frappe .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-frappe .modal-close::before,html.theme--catppuccin-frappe .delete::before,html.theme--catppuccin-frappe .modal-close::after,html.theme--catppuccin-frappe .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-frappe .modal-close::before,html.theme--catppuccin-frappe .delete::before{height:2px;width:50%}html.theme--catppuccin-frappe .modal-close::after,html.theme--catppuccin-frappe .delete::after{height:50%;width:2px}html.theme--catppuccin-frappe .modal-close:hover,html.theme--catppuccin-frappe .delete:hover,html.theme--catppuccin-frappe .modal-close:focus,html.theme--catppuccin-frappe .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-frappe .modal-close:active,html.theme--catppuccin-frappe .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-frappe .is-small.modal-close,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-frappe .is-small.delete,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-frappe .is-medium.modal-close,html.theme--catppuccin-frappe .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-frappe .is-large.modal-close,html.theme--catppuccin-frappe .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-frappe .control.is-loading::after,html.theme--catppuccin-frappe .select.is-loading::after,html.theme--catppuccin-frappe .loader,html.theme--catppuccin-frappe .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #838ba7;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-frappe .hero-video,html.theme--catppuccin-frappe .modal-background,html.theme--catppuccin-frappe .modal,html.theme--catppuccin-frappe .image.is-square img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-frappe .image.is-square .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-frappe .image.is-1by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-frappe .image.is-1by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-frappe .image.is-5by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-frappe .image.is-5by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-frappe .image.is-4by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-frappe .image.is-4by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-frappe .image.is-3by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-frappe .image.is-5by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-frappe .image.is-5by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-frappe .image.is-16by9 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-frappe .image.is-16by9 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-frappe .image.is-2by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-frappe .image.is-2by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-frappe .image.is-3by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-frappe .image.is-3by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-frappe .image.is-4by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-frappe .image.is-4by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-frappe .image.is-3by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-frappe .image.is-3by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-frappe .image.is-2by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-frappe .image.is-2by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-frappe .image.is-3by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-frappe .image.is-9by16 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-frappe .image.is-9by16 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-frappe .image.is-1by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-frappe .image.is-1by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-frappe .image.is-1by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-frappe .image.is-1by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-frappe .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#414559 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#2b2e3c !important}.has-background-dark{background-color:#414559 !important}.has-text-primary{color:#8caaee !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#6089e7 !important}.has-background-primary{background-color:#8caaee !important}.has-text-primary-light{color:#edf2fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c1d1f6 !important}.has-background-primary-light{background-color:#edf2fc !important}.has-text-primary-dark{color:#153a8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#1c4cbb !important}.has-background-primary-dark{background-color:#153a8e !important}.has-text-link{color:#8caaee !important}a.has-text-link:hover,a.has-text-link:focus{color:#6089e7 !important}.has-background-link{background-color:#8caaee !important}.has-text-link-light{color:#edf2fc !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c1d1f6 !important}.has-background-link-light{background-color:#edf2fc !important}.has-text-link-dark{color:#153a8e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1c4cbb !important}.has-background-link-dark{background-color:#153a8e !important}.has-text-info{color:#81c8be !important}a.has-text-info:hover,a.has-text-info:focus{color:#5db9ac !important}.has-background-info{background-color:#81c8be !important}.has-text-info-light{color:#f1f9f8 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#cde9e5 !important}.has-background-info-light{background-color:#f1f9f8 !important}.has-text-info-dark{color:#2d675f !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#3c8a7f !important}.has-background-info-dark{background-color:#2d675f !important}.has-text-success{color:#a6d189 !important}a.has-text-success:hover,a.has-text-success:focus{color:#8ac364 !important}.has-background-success{background-color:#a6d189 !important}.has-text-success-light{color:#f4f9f0 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#d8ebcc !important}.has-background-success-light{background-color:#f4f9f0 !important}.has-text-success-dark{color:#446a29 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#5b8f38 !important}.has-background-success-dark{background-color:#446a29 !important}.has-text-warning{color:#e5c890 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#dbb467 !important}.has-background-warning{background-color:#e5c890 !important}.has-text-warning-light{color:#fbf7ee !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f1e2c5 !important}.has-background-warning-light{background-color:#fbf7ee !important}.has-text-warning-dark{color:#78591c !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#a17726 !important}.has-background-warning-dark{background-color:#78591c !important}.has-text-danger{color:#e78284 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#df575a !important}.has-background-danger{background-color:#e78284 !important}.has-text-danger-light{color:#fceeee !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f3c3c4 !important}.has-background-danger-light{background-color:#fceeee !important}.has-text-danger-dark{color:#9a1e20 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c52629 !important}.has-background-danger-dark{background-color:#9a1e20 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#414559 !important}.has-background-grey-darker{background-color:#414559 !important}.has-text-grey-dark{color:#51576d !important}.has-background-grey-dark{background-color:#51576d !important}.has-text-grey{color:#626880 !important}.has-background-grey{background-color:#626880 !important}.has-text-grey-light{color:#737994 !important}.has-background-grey-light{background-color:#737994 !important}.has-text-grey-lighter{color:#838ba7 !important}.has-background-grey-lighter{background-color:#838ba7 !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--catppuccin-frappe html{background-color:#303446;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-frappe article,html.theme--catppuccin-frappe aside,html.theme--catppuccin-frappe figure,html.theme--catppuccin-frappe footer,html.theme--catppuccin-frappe header,html.theme--catppuccin-frappe hgroup,html.theme--catppuccin-frappe section{display:block}html.theme--catppuccin-frappe body,html.theme--catppuccin-frappe button,html.theme--catppuccin-frappe input,html.theme--catppuccin-frappe optgroup,html.theme--catppuccin-frappe select,html.theme--catppuccin-frappe textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-frappe code,html.theme--catppuccin-frappe pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-frappe body{color:#c6d0f5;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-frappe a{color:#8caaee;cursor:pointer;text-decoration:none}html.theme--catppuccin-frappe a strong{color:currentColor}html.theme--catppuccin-frappe a:hover{color:#99d1db}html.theme--catppuccin-frappe code{background-color:#292c3c;color:#c6d0f5;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-frappe hr{background-color:#292c3c;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-frappe img{height:auto;max-width:100%}html.theme--catppuccin-frappe input[type="checkbox"],html.theme--catppuccin-frappe input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-frappe small{font-size:.875em}html.theme--catppuccin-frappe span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-frappe strong{color:#b0bef1;font-weight:700}html.theme--catppuccin-frappe fieldset{border:none}html.theme--catppuccin-frappe pre{-webkit-overflow-scrolling:touch;background-color:#292c3c;color:#c6d0f5;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-frappe pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-frappe table td,html.theme--catppuccin-frappe table th{vertical-align:top}html.theme--catppuccin-frappe table td:not([align]),html.theme--catppuccin-frappe table th:not([align]){text-align:inherit}html.theme--catppuccin-frappe table th{color:#b0bef1}html.theme--catppuccin-frappe .box{background-color:#51576d;border-radius:8px;box-shadow:none;color:#c6d0f5;display:block;padding:1.25rem}html.theme--catppuccin-frappe a.box:hover,html.theme--catppuccin-frappe a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #8caaee}html.theme--catppuccin-frappe a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #8caaee}html.theme--catppuccin-frappe .button{background-color:#292c3c;border-color:#484d69;border-width:1px;color:#8caaee;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-frappe .button strong{color:inherit}html.theme--catppuccin-frappe .button .icon,html.theme--catppuccin-frappe .button .icon.is-small,html.theme--catppuccin-frappe .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-frappe .button .icon.is-medium,html.theme--catppuccin-frappe .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-frappe .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-frappe .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-frappe .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-frappe .button:hover,html.theme--catppuccin-frappe .button.is-hovered{border-color:#737994;color:#b0bef1}html.theme--catppuccin-frappe .button:focus,html.theme--catppuccin-frappe .button.is-focused{border-color:#737994;color:#769aeb}html.theme--catppuccin-frappe .button:focus:not(:active),html.theme--catppuccin-frappe .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button:active,html.theme--catppuccin-frappe .button.is-active{border-color:#51576d;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text{background-color:transparent;border-color:transparent;color:#c6d0f5;text-decoration:underline}html.theme--catppuccin-frappe .button.is-text:hover,html.theme--catppuccin-frappe .button.is-text.is-hovered,html.theme--catppuccin-frappe .button.is-text:focus,html.theme--catppuccin-frappe .button.is-text.is-focused{background-color:#292c3c;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text:active,html.theme--catppuccin-frappe .button.is-text.is-active{background-color:#1f212d;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-frappe .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#8caaee;text-decoration:none}html.theme--catppuccin-frappe .button.is-ghost:hover,html.theme--catppuccin-frappe .button.is-ghost.is-hovered{color:#8caaee;text-decoration:underline}html.theme--catppuccin-frappe .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:hover,html.theme--catppuccin-frappe .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:focus,html.theme--catppuccin-frappe .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:focus:not(:active),html.theme--catppuccin-frappe .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .button.is-white:active,html.theme--catppuccin-frappe .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-frappe .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted:hover,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-frappe .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-outlined:hover,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-white.is-outlined:focus,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:hover,html.theme--catppuccin-frappe .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:focus,html.theme--catppuccin-frappe .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:focus:not(:active),html.theme--catppuccin-frappe .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .button.is-black:active,html.theme--catppuccin-frappe .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-frappe .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted:hover,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-outlined:hover,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-black.is-outlined:focus,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:hover,html.theme--catppuccin-frappe .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:focus,html.theme--catppuccin-frappe .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:focus:not(:active),html.theme--catppuccin-frappe .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .button.is-light:active,html.theme--catppuccin-frappe .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-frappe .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted:hover,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-outlined:hover,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-light.is-outlined:focus,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-dark,html.theme--catppuccin-frappe .content kbd.button{background-color:#414559;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:hover,html.theme--catppuccin-frappe .content kbd.button:hover,html.theme--catppuccin-frappe .button.is-dark.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-hovered{background-color:#3c3f52;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:focus,html.theme--catppuccin-frappe .content kbd.button:focus,html.theme--catppuccin-frappe .button.is-dark.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:focus:not(:active),html.theme--catppuccin-frappe .content kbd.button:focus:not(:active),html.theme--catppuccin-frappe .button.is-dark.is-focused:not(:active),html.theme--catppuccin-frappe .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .button.is-dark:active,html.theme--catppuccin-frappe .content kbd.button:active,html.theme--catppuccin-frappe .button.is-dark.is-active,html.theme--catppuccin-frappe .content kbd.button.is-active{background-color:#363a4a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark[disabled],html.theme--catppuccin-frappe .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button{background-color:#414559;border-color:#414559;box-shadow:none}html.theme--catppuccin-frappe .button.is-dark.is-inverted,html.theme--catppuccin-frappe .content kbd.button.is-inverted{background-color:#fff;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted:hover,html.theme--catppuccin-frappe .content kbd.button.is-inverted:hover,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-dark.is-inverted[disabled],html.theme--catppuccin-frappe .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-loading::after,html.theme--catppuccin-frappe .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined,html.theme--catppuccin-frappe .content kbd.button.is-outlined{background-color:transparent;border-color:#414559;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-outlined:hover,html.theme--catppuccin-frappe .content kbd.button.is-outlined:hover,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-dark.is-outlined:focus,html.theme--catppuccin-frappe .content kbd.button.is-outlined:focus,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-focused{background-color:#414559;border-color:#414559;color:#fff}html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #414559 #414559 !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined[disabled],html.theme--catppuccin-frappe .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-outlined{background-color:transparent;border-color:#414559;box-shadow:none;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #414559 #414559 !important}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-primary,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:hover,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:focus,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:focus:not(:active),html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-frappe .button.is-primary.is-focused:not(:active),html.theme--catppuccin-frappe .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button.is-primary:active,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-frappe .button.is-primary.is-active,html.theme--catppuccin-frappe .docstring>section>a.button.is-active.docs-sourcelink{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink{background-color:#8caaee;border-color:#8caaee;box-shadow:none}html.theme--catppuccin-frappe .button.is-primary.is-inverted,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-primary.is-inverted[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-loading::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-outlined:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-frappe .button.is-primary.is-outlined:focus,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8caaee;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-light,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .button.is-primary.is-light:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-light.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e2eafb;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-primary.is-light:active,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-frappe .button.is-primary.is-light.is-active,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d7e1f9;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-link{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:hover,html.theme--catppuccin-frappe .button.is-link.is-hovered{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:focus,html.theme--catppuccin-frappe .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:focus:not(:active),html.theme--catppuccin-frappe .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button.is-link:active,html.theme--catppuccin-frappe .button.is-link.is-active{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link{background-color:#8caaee;border-color:#8caaee;box-shadow:none}html.theme--catppuccin-frappe .button.is-link.is-inverted{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted:hover,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-link.is-outlined{background-color:transparent;border-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-outlined:hover,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-link.is-outlined:focus,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-focused{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-outlined{background-color:transparent;border-color:#8caaee;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-light{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .button.is-link.is-light:hover,html.theme--catppuccin-frappe .button.is-link.is-light.is-hovered{background-color:#e2eafb;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-link.is-light:active,html.theme--catppuccin-frappe .button.is-link.is-light.is-active{background-color:#d7e1f9;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-info{background-color:#81c8be;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:hover,html.theme--catppuccin-frappe .button.is-info.is-hovered{background-color:#78c4b9;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:focus,html.theme--catppuccin-frappe .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:focus:not(:active),html.theme--catppuccin-frappe .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .button.is-info:active,html.theme--catppuccin-frappe .button.is-info.is-active{background-color:#6fc0b5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info{background-color:#81c8be;border-color:#81c8be;box-shadow:none}html.theme--catppuccin-frappe .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted:hover,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-info.is-outlined{background-color:transparent;border-color:#81c8be;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-outlined:hover,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-info.is-outlined:focus,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-focused{background-color:#81c8be;border-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #81c8be #81c8be !important}html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-outlined{background-color:transparent;border-color:#81c8be;box-shadow:none;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #81c8be #81c8be !important}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-light{background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .button.is-info.is-light:hover,html.theme--catppuccin-frappe .button.is-info.is-light.is-hovered{background-color:#e8f5f3;border-color:transparent;color:#2d675f}html.theme--catppuccin-frappe .button.is-info.is-light:active,html.theme--catppuccin-frappe .button.is-info.is-light.is-active{background-color:#dff1ef;border-color:transparent;color:#2d675f}html.theme--catppuccin-frappe .button.is-success{background-color:#a6d189;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:hover,html.theme--catppuccin-frappe .button.is-success.is-hovered{background-color:#9fcd80;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:focus,html.theme--catppuccin-frappe .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:focus:not(:active),html.theme--catppuccin-frappe .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .button.is-success:active,html.theme--catppuccin-frappe .button.is-success.is-active{background-color:#98ca77;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success{background-color:#a6d189;border-color:#a6d189;box-shadow:none}html.theme--catppuccin-frappe .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted:hover,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-success.is-outlined{background-color:transparent;border-color:#a6d189;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-outlined:hover,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-success.is-outlined:focus,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-focused{background-color:#a6d189;border-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6d189 #a6d189 !important}html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-outlined{background-color:transparent;border-color:#a6d189;box-shadow:none;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6d189 #a6d189 !important}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-light{background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .button.is-success.is-light:hover,html.theme--catppuccin-frappe .button.is-success.is-light.is-hovered{background-color:#edf6e7;border-color:transparent;color:#446a29}html.theme--catppuccin-frappe .button.is-success.is-light:active,html.theme--catppuccin-frappe .button.is-success.is-light.is-active{background-color:#e6f2de;border-color:transparent;color:#446a29}html.theme--catppuccin-frappe .button.is-warning{background-color:#e5c890;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:hover,html.theme--catppuccin-frappe .button.is-warning.is-hovered{background-color:#e3c386;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:focus,html.theme--catppuccin-frappe .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:focus:not(:active),html.theme--catppuccin-frappe .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .button.is-warning:active,html.theme--catppuccin-frappe .button.is-warning.is-active{background-color:#e0be7b;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning{background-color:#e5c890;border-color:#e5c890;box-shadow:none}html.theme--catppuccin-frappe .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted:hover,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined{background-color:transparent;border-color:#e5c890;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-outlined:hover,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-warning.is-outlined:focus,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-focused{background-color:#e5c890;border-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #e5c890 #e5c890 !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-outlined{background-color:transparent;border-color:#e5c890;box-shadow:none;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e5c890 #e5c890 !important}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-light{background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .button.is-warning.is-light:hover,html.theme--catppuccin-frappe .button.is-warning.is-light.is-hovered{background-color:#f9f2e4;border-color:transparent;color:#78591c}html.theme--catppuccin-frappe .button.is-warning.is-light:active,html.theme--catppuccin-frappe .button.is-warning.is-light.is-active{background-color:#f6edda;border-color:transparent;color:#78591c}html.theme--catppuccin-frappe .button.is-danger{background-color:#e78284;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:hover,html.theme--catppuccin-frappe .button.is-danger.is-hovered{background-color:#e57779;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:focus,html.theme--catppuccin-frappe .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:focus:not(:active),html.theme--catppuccin-frappe .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .button.is-danger:active,html.theme--catppuccin-frappe .button.is-danger.is-active{background-color:#e36d6f;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger{background-color:#e78284;border-color:#e78284;box-shadow:none}html.theme--catppuccin-frappe .button.is-danger.is-inverted{background-color:#fff;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted:hover,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined{background-color:transparent;border-color:#e78284;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-outlined:hover,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-danger.is-outlined:focus,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-focused{background-color:#e78284;border-color:#e78284;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #e78284 #e78284 !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-outlined{background-color:transparent;border-color:#e78284;box-shadow:none;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e78284 #e78284 !important}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-light{background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .button.is-danger.is-light:hover,html.theme--catppuccin-frappe .button.is-danger.is-light.is-hovered{background-color:#fae3e4;border-color:transparent;color:#9a1e20}html.theme--catppuccin-frappe .button.is-danger.is-light:active,html.theme--catppuccin-frappe .button.is-danger.is-light.is-active{background-color:#f8d8d9;border-color:transparent;color:#9a1e20}html.theme--catppuccin-frappe .button.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-frappe .button.is-small:not(.is-rounded),html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-frappe .button.is-normal{font-size:1rem}html.theme--catppuccin-frappe .button.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .button.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button{background-color:#737994;border-color:#626880;box-shadow:none;opacity:.5}html.theme--catppuccin-frappe .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-frappe .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-frappe .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-frappe .button.is-static{background-color:#292c3c;border-color:#626880;color:#838ba7;box-shadow:none;pointer-events:none}html.theme--catppuccin-frappe .button.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-frappe .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-frappe .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-frappe .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-frappe .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-frappe .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-frappe .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-frappe .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-frappe .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-frappe .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-frappe .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-frappe .buttons.has-addons .button:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-frappe .buttons.has-addons .button:focus,html.theme--catppuccin-frappe .buttons.has-addons .button.is-focused,html.theme--catppuccin-frappe .buttons.has-addons .button:active,html.theme--catppuccin-frappe .buttons.has-addons .button.is-active,html.theme--catppuccin-frappe .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-frappe .buttons.has-addons .button:focus:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-frappe .buttons.has-addons .button:active:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-frappe .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .buttons.is-centered{justify-content:center}html.theme--catppuccin-frappe .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-frappe .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .button.is-responsive.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-frappe .button.is-responsive,html.theme--catppuccin-frappe .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-frappe .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-frappe .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .button.is-responsive.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-frappe .button.is-responsive,html.theme--catppuccin-frappe .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-frappe .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-frappe .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-frappe .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-frappe .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-frappe .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-frappe .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-frappe .content li+li{margin-top:0.25em}html.theme--catppuccin-frappe .content p:not(:last-child),html.theme--catppuccin-frappe .content dl:not(:last-child),html.theme--catppuccin-frappe .content ol:not(:last-child),html.theme--catppuccin-frappe .content ul:not(:last-child),html.theme--catppuccin-frappe .content blockquote:not(:last-child),html.theme--catppuccin-frappe .content pre:not(:last-child),html.theme--catppuccin-frappe .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-frappe .content h1,html.theme--catppuccin-frappe .content h2,html.theme--catppuccin-frappe .content h3,html.theme--catppuccin-frappe .content h4,html.theme--catppuccin-frappe .content h5,html.theme--catppuccin-frappe .content h6{color:#c6d0f5;font-weight:600;line-height:1.125}html.theme--catppuccin-frappe .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-frappe .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-frappe .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-frappe .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-frappe .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-frappe .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-frappe .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-frappe .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-frappe .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-frappe .content blockquote{background-color:#292c3c;border-left:5px solid #626880;padding:1.25em 1.5em}html.theme--catppuccin-frappe .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-frappe .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-frappe .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-frappe .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-frappe .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-frappe .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-frappe .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-frappe .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-frappe .content ul ul ul{list-style-type:square}html.theme--catppuccin-frappe .content dd{margin-left:2em}html.theme--catppuccin-frappe .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-frappe .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-frappe .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-frappe .content figure img{display:inline-block}html.theme--catppuccin-frappe .content figure figcaption{font-style:italic}html.theme--catppuccin-frappe .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-frappe .content sup,html.theme--catppuccin-frappe .content sub{font-size:75%}html.theme--catppuccin-frappe .content table{width:100%}html.theme--catppuccin-frappe .content table td,html.theme--catppuccin-frappe .content table th{border:1px solid #626880;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-frappe .content table th{color:#b0bef1}html.theme--catppuccin-frappe .content table th:not([align]){text-align:inherit}html.theme--catppuccin-frappe .content table thead td,html.theme--catppuccin-frappe .content table thead th{border-width:0 0 2px;color:#b0bef1}html.theme--catppuccin-frappe .content table tfoot td,html.theme--catppuccin-frappe .content table tfoot th{border-width:2px 0 0;color:#b0bef1}html.theme--catppuccin-frappe .content table tbody tr:last-child td,html.theme--catppuccin-frappe .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-frappe .content .tabs li+li{margin-top:0}html.theme--catppuccin-frappe .content.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-frappe .content.is-normal{font-size:1rem}html.theme--catppuccin-frappe .content.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .content.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-frappe .icon.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-frappe .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-frappe .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-frappe .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-frappe .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-frappe .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-frappe div.icon-text{display:flex}html.theme--catppuccin-frappe .image,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-frappe .image img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-frappe .image img.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-frappe .image.is-fullwidth,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-frappe .image.is-square img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-frappe .image.is-square .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-frappe .image.is-1by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-frappe .image.is-1by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-frappe .image.is-5by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-frappe .image.is-5by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-frappe .image.is-4by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-frappe .image.is-4by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-frappe .image.is-3by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-frappe .image.is-5by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-frappe .image.is-5by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-frappe .image.is-16by9 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-frappe .image.is-16by9 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-frappe .image.is-2by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-frappe .image.is-2by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-frappe .image.is-3by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-frappe .image.is-3by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-frappe .image.is-4by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-frappe .image.is-4by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-frappe .image.is-3by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-frappe .image.is-3by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-frappe .image.is-2by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-frappe .image.is-2by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-frappe .image.is-3by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-frappe .image.is-9by16 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-frappe .image.is-9by16 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-frappe .image.is-1by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-frappe .image.is-1by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-frappe .image.is-1by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-frappe .image.is-1by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-frappe .image.is-square,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-frappe .image.is-1by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-frappe .image.is-5by4,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-frappe .image.is-4by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-frappe .image.is-3by2,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-frappe .image.is-5by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-frappe .image.is-16by9,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-frappe .image.is-2by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-frappe .image.is-3by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-frappe .image.is-4by5,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-frappe .image.is-3by4,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-frappe .image.is-2by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-frappe .image.is-3by5,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-frappe .image.is-9by16,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-frappe .image.is-1by2,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-frappe .image.is-1by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-frappe .image.is-16x16,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-frappe .image.is-24x24,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-frappe .image.is-32x32,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-frappe .image.is-48x48,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-frappe .image.is-64x64,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-frappe .image.is-96x96,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-frappe .image.is-128x128,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-frappe .notification{background-color:#292c3c;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-frappe .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-frappe .notification strong{color:currentColor}html.theme--catppuccin-frappe .notification code,html.theme--catppuccin-frappe .notification pre{background:#fff}html.theme--catppuccin-frappe .notification pre code{background:transparent}html.theme--catppuccin-frappe .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-frappe .notification .title,html.theme--catppuccin-frappe .notification .subtitle,html.theme--catppuccin-frappe .notification .content{color:currentColor}html.theme--catppuccin-frappe .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-dark,html.theme--catppuccin-frappe .content kbd.notification{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .notification.is-primary,html.theme--catppuccin-frappe .docstring>section>a.notification.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .notification.is-primary.is-light,html.theme--catppuccin-frappe .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .notification.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .notification.is-link.is-light{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .notification.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-info.is-light{background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .notification.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-success.is-light{background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .notification.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-warning.is-light{background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .notification.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .notification.is-danger.is-light{background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-frappe .progress::-webkit-progress-bar{background-color:#51576d}html.theme--catppuccin-frappe .progress::-webkit-progress-value{background-color:#838ba7}html.theme--catppuccin-frappe .progress::-moz-progress-bar{background-color:#838ba7}html.theme--catppuccin-frappe .progress::-ms-fill{background-color:#838ba7;border:none}html.theme--catppuccin-frappe .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-frappe .content kbd.progress::-webkit-progress-value{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-frappe .content kbd.progress::-moz-progress-bar{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark::-ms-fill,html.theme--catppuccin-frappe .content kbd.progress::-ms-fill{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark:indeterminate,html.theme--catppuccin-frappe .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #414559 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary::-ms-fill,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary:indeterminate,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #8caaee 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-link::-webkit-progress-value{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link::-moz-progress-bar{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link::-ms-fill{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link:indeterminate{background-image:linear-gradient(to right, #8caaee 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-info::-webkit-progress-value{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info::-moz-progress-bar{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info::-ms-fill{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info:indeterminate{background-image:linear-gradient(to right, #81c8be 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-success::-webkit-progress-value{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success::-moz-progress-bar{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success::-ms-fill{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6d189 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-warning::-webkit-progress-value{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning::-moz-progress-bar{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning::-ms-fill{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #e5c890 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-danger::-webkit-progress-value{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger::-moz-progress-bar{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger::-ms-fill{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #e78284 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#51576d;background-image:linear-gradient(to right, #c6d0f5 30%, #51576d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-frappe .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-frappe .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-frappe .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-frappe .progress.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-frappe .progress.is-medium{height:1.25rem}html.theme--catppuccin-frappe .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-frappe .table{background-color:#51576d;color:#c6d0f5}html.theme--catppuccin-frappe .table td,html.theme--catppuccin-frappe .table th{border:1px solid #626880;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-frappe .table td.is-white,html.theme--catppuccin-frappe .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .table td.is-black,html.theme--catppuccin-frappe .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .table td.is-light,html.theme--catppuccin-frappe .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-dark,html.theme--catppuccin-frappe .table th.is-dark{background-color:#414559;border-color:#414559;color:#fff}html.theme--catppuccin-frappe .table td.is-primary,html.theme--catppuccin-frappe .table th.is-primary{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-link,html.theme--catppuccin-frappe .table th.is-link{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-info,html.theme--catppuccin-frappe .table th.is-info{background-color:#81c8be;border-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-success,html.theme--catppuccin-frappe .table th.is-success{background-color:#a6d189;border-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-warning,html.theme--catppuccin-frappe .table th.is-warning{background-color:#e5c890;border-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-danger,html.theme--catppuccin-frappe .table th.is-danger{background-color:#e78284;border-color:#e78284;color:#fff}html.theme--catppuccin-frappe .table td.is-narrow,html.theme--catppuccin-frappe .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-frappe .table td.is-selected,html.theme--catppuccin-frappe .table th.is-selected{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-selected a,html.theme--catppuccin-frappe .table td.is-selected strong,html.theme--catppuccin-frappe .table th.is-selected a,html.theme--catppuccin-frappe .table th.is-selected strong{color:currentColor}html.theme--catppuccin-frappe .table td.is-vcentered,html.theme--catppuccin-frappe .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-frappe .table th{color:#b0bef1}html.theme--catppuccin-frappe .table th:not([align]){text-align:left}html.theme--catppuccin-frappe .table tr.is-selected{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table tr.is-selected a,html.theme--catppuccin-frappe .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-frappe .table tr.is-selected td,html.theme--catppuccin-frappe .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-frappe .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table thead td,html.theme--catppuccin-frappe .table thead th{border-width:0 0 2px;color:#b0bef1}html.theme--catppuccin-frappe .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table tfoot td,html.theme--catppuccin-frappe .table tfoot th{border-width:2px 0 0;color:#b0bef1}html.theme--catppuccin-frappe .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table tbody tr:last-child td,html.theme--catppuccin-frappe .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-frappe .table.is-bordered td,html.theme--catppuccin-frappe .table.is-bordered th{border-width:1px}html.theme--catppuccin-frappe .table.is-bordered tr:last-child td,html.theme--catppuccin-frappe .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-frappe .table.is-fullwidth{width:100%}html.theme--catppuccin-frappe .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#414559}html.theme--catppuccin-frappe .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#414559}html.theme--catppuccin-frappe .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#454a5f}html.theme--catppuccin-frappe .table.is-narrow td,html.theme--catppuccin-frappe .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-frappe .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#414559}html.theme--catppuccin-frappe .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-frappe .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .tags .tag,html.theme--catppuccin-frappe .tags .content kbd,html.theme--catppuccin-frappe .content .tags kbd,html.theme--catppuccin-frappe .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-frappe .tags .tag:not(:last-child),html.theme--catppuccin-frappe .tags .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags kbd:not(:last-child),html.theme--catppuccin-frappe .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-frappe .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-frappe .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-frappe .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-frappe .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-frappe .tags.is-centered{justify-content:center}html.theme--catppuccin-frappe .tags.is-centered .tag,html.theme--catppuccin-frappe .tags.is-centered .content kbd,html.theme--catppuccin-frappe .content .tags.is-centered kbd,html.theme--catppuccin-frappe .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-frappe .tags.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .tags.is-right .tag:not(:first-child),html.theme--catppuccin-frappe .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-frappe .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-frappe .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-frappe .tags.is-right .tag:not(:last-child),html.theme--catppuccin-frappe .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-frappe .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-frappe .tags.has-addons .tag,html.theme--catppuccin-frappe .tags.has-addons .content kbd,html.theme--catppuccin-frappe .content .tags.has-addons kbd,html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-frappe .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-frappe .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-frappe .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-frappe .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-frappe .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-frappe .tag:not(body),html.theme--catppuccin-frappe .content kbd:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#292c3c;border-radius:.4em;color:#c6d0f5;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-frappe .tag:not(body) .delete,html.theme--catppuccin-frappe .content kbd:not(body) .delete,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-frappe .tag.is-white:not(body),html.theme--catppuccin-frappe .content kbd.is-white:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .tag.is-black:not(body),html.theme--catppuccin-frappe .content kbd.is-black:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .tag.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-dark:not(body),html.theme--catppuccin-frappe .content kbd:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-frappe .content .docstring>section>kbd:not(body){background-color:#414559;color:#fff}html.theme--catppuccin-frappe .tag.is-primary:not(body),html.theme--catppuccin-frappe .content kbd.is-primary:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .tag.is-primary.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .tag.is-link:not(body),html.theme--catppuccin-frappe .content kbd.is-link:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .tag.is-link.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-link.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .tag.is-info:not(body),html.theme--catppuccin-frappe .content kbd.is-info:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-info.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-info.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .tag.is-success:not(body),html.theme--catppuccin-frappe .content kbd.is-success:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-success.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-success.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .tag.is-warning:not(body),html.theme--catppuccin-frappe .content kbd.is-warning:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-warning.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .tag.is-danger:not(body),html.theme--catppuccin-frappe .content kbd.is-danger:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .tag.is-danger.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .tag.is-normal:not(body),html.theme--catppuccin-frappe .content kbd.is-normal:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-frappe .tag.is-medium:not(body),html.theme--catppuccin-frappe .content kbd.is-medium:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-frappe .tag.is-large:not(body),html.theme--catppuccin-frappe .content kbd.is-large:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-frappe .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-frappe .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-frappe .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-frappe .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-frappe .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-frappe .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-frappe .tag.is-delete:not(body),html.theme--catppuccin-frappe .content kbd.is-delete:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-frappe .tag.is-delete:not(body)::before,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::before,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-frappe .tag.is-delete:not(body)::after,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::after,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-frappe .tag.is-delete:not(body)::before,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::before,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-frappe .tag.is-delete:not(body)::after,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::after,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-frappe .tag.is-delete:not(body):hover,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):hover,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-frappe .tag.is-delete:not(body):focus,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):focus,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1f212d}html.theme--catppuccin-frappe .tag.is-delete:not(body):active,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):active,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#14161e}html.theme--catppuccin-frappe .tag.is-rounded:not(body),html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-frappe .content kbd.is-rounded:not(body),html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-frappe a.tag:hover,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-frappe .title,html.theme--catppuccin-frappe .subtitle{word-break:break-word}html.theme--catppuccin-frappe .title em,html.theme--catppuccin-frappe .title span,html.theme--catppuccin-frappe .subtitle em,html.theme--catppuccin-frappe .subtitle span{font-weight:inherit}html.theme--catppuccin-frappe .title sub,html.theme--catppuccin-frappe .subtitle sub{font-size:.75em}html.theme--catppuccin-frappe .title sup,html.theme--catppuccin-frappe .subtitle sup{font-size:.75em}html.theme--catppuccin-frappe .title .tag,html.theme--catppuccin-frappe .title .content kbd,html.theme--catppuccin-frappe .content .title kbd,html.theme--catppuccin-frappe .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-frappe .subtitle .tag,html.theme--catppuccin-frappe .subtitle .content kbd,html.theme--catppuccin-frappe .content .subtitle kbd,html.theme--catppuccin-frappe .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-frappe .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-frappe .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-frappe .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-frappe .title.is-1{font-size:3rem}html.theme--catppuccin-frappe .title.is-2{font-size:2.5rem}html.theme--catppuccin-frappe .title.is-3{font-size:2rem}html.theme--catppuccin-frappe .title.is-4{font-size:1.5rem}html.theme--catppuccin-frappe .title.is-5{font-size:1.25rem}html.theme--catppuccin-frappe .title.is-6{font-size:1rem}html.theme--catppuccin-frappe .title.is-7{font-size:.75rem}html.theme--catppuccin-frappe .subtitle{color:#737994;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-frappe .subtitle strong{color:#737994;font-weight:600}html.theme--catppuccin-frappe .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-frappe .subtitle.is-1{font-size:3rem}html.theme--catppuccin-frappe .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-frappe .subtitle.is-3{font-size:2rem}html.theme--catppuccin-frappe .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-frappe .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-frappe .subtitle.is-6{font-size:1rem}html.theme--catppuccin-frappe .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-frappe .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-frappe .number{align-items:center;background-color:#292c3c;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{background-color:#303446;border-color:#626880;border-radius:.4em;color:#838ba7}html.theme--catppuccin-frappe .select select::-moz-placeholder,html.theme--catppuccin-frappe .textarea::-moz-placeholder,html.theme--catppuccin-frappe .input::-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select::-webkit-input-placeholder,html.theme--catppuccin-frappe .textarea::-webkit-input-placeholder,html.theme--catppuccin-frappe .input::-webkit-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:-moz-placeholder,html.theme--catppuccin-frappe .textarea:-moz-placeholder,html.theme--catppuccin-frappe .input:-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:-ms-input-placeholder,html.theme--catppuccin-frappe .textarea:-ms-input-placeholder,html.theme--catppuccin-frappe .input:-ms-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:hover,html.theme--catppuccin-frappe .textarea:hover,html.theme--catppuccin-frappe .input:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-frappe .select select.is-hovered,html.theme--catppuccin-frappe .is-hovered.textarea,html.theme--catppuccin-frappe .is-hovered.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#737994}html.theme--catppuccin-frappe .select select:focus,html.theme--catppuccin-frappe .textarea:focus,html.theme--catppuccin-frappe .input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-frappe .select select.is-focused,html.theme--catppuccin-frappe .is-focused.textarea,html.theme--catppuccin-frappe .is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .select select:active,html.theme--catppuccin-frappe .textarea:active,html.theme--catppuccin-frappe .input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-frappe .select select.is-active,html.theme--catppuccin-frappe .is-active.textarea,html.theme--catppuccin-frappe .is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#8caaee;box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select select[disabled],html.theme--catppuccin-frappe .textarea[disabled],html.theme--catppuccin-frappe .input[disabled],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-frappe .select select,fieldset[disabled] html.theme--catppuccin-frappe .textarea,fieldset[disabled] html.theme--catppuccin-frappe .input,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{background-color:#737994;border-color:#292c3c;box-shadow:none;color:#f1f4fd}html.theme--catppuccin-frappe .select select[disabled]::-moz-placeholder,html.theme--catppuccin-frappe .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-frappe .input[disabled]::-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]:-moz-placeholder,html.theme--catppuccin-frappe .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-frappe .input[disabled]:-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-frappe .textarea[readonly],html.theme--catppuccin-frappe .input[readonly],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-frappe .is-white.textarea,html.theme--catppuccin-frappe .is-white.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-frappe .is-white.textarea:focus,html.theme--catppuccin-frappe .is-white.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-frappe .is-white.is-focused.textarea,html.theme--catppuccin-frappe .is-white.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-white.textarea:active,html.theme--catppuccin-frappe .is-white.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-frappe .is-white.is-active.textarea,html.theme--catppuccin-frappe .is-white.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .is-black.textarea,html.theme--catppuccin-frappe .is-black.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-frappe .is-black.textarea:focus,html.theme--catppuccin-frappe .is-black.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-frappe .is-black.is-focused.textarea,html.theme--catppuccin-frappe .is-black.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-black.textarea:active,html.theme--catppuccin-frappe .is-black.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-frappe .is-black.is-active.textarea,html.theme--catppuccin-frappe .is-black.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .is-light.textarea,html.theme--catppuccin-frappe .is-light.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-frappe .is-light.textarea:focus,html.theme--catppuccin-frappe .is-light.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-frappe .is-light.is-focused.textarea,html.theme--catppuccin-frappe .is-light.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-light.textarea:active,html.theme--catppuccin-frappe .is-light.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-frappe .is-light.is-active.textarea,html.theme--catppuccin-frappe .is-light.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .is-dark.textarea,html.theme--catppuccin-frappe .content kbd.textarea,html.theme--catppuccin-frappe .is-dark.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-frappe .content kbd.input{border-color:#414559}html.theme--catppuccin-frappe .is-dark.textarea:focus,html.theme--catppuccin-frappe .content kbd.textarea:focus,html.theme--catppuccin-frappe .is-dark.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-frappe .content kbd.input:focus,html.theme--catppuccin-frappe .is-dark.is-focused.textarea,html.theme--catppuccin-frappe .content kbd.is-focused.textarea,html.theme--catppuccin-frappe .is-dark.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .content kbd.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-dark.textarea:active,html.theme--catppuccin-frappe .content kbd.textarea:active,html.theme--catppuccin-frappe .is-dark.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-frappe .content kbd.input:active,html.theme--catppuccin-frappe .is-dark.is-active.textarea,html.theme--catppuccin-frappe .content kbd.is-active.textarea,html.theme--catppuccin-frappe .is-dark.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .content kbd.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .is-primary.textarea,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink{border-color:#8caaee}html.theme--catppuccin-frappe .is-primary.textarea:focus,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-frappe .is-primary.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-frappe .is-primary.is-focused.textarea,html.theme--catppuccin-frappe .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.textarea:active,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-frappe .is-primary.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-frappe .is-primary.is-active.textarea,html.theme--catppuccin-frappe .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .is-link.textarea,html.theme--catppuccin-frappe .is-link.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#8caaee}html.theme--catppuccin-frappe .is-link.textarea:focus,html.theme--catppuccin-frappe .is-link.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-frappe .is-link.is-focused.textarea,html.theme--catppuccin-frappe .is-link.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-link.textarea:active,html.theme--catppuccin-frappe .is-link.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-frappe .is-link.is-active.textarea,html.theme--catppuccin-frappe .is-link.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .is-info.textarea,html.theme--catppuccin-frappe .is-info.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#81c8be}html.theme--catppuccin-frappe .is-info.textarea:focus,html.theme--catppuccin-frappe .is-info.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-frappe .is-info.is-focused.textarea,html.theme--catppuccin-frappe .is-info.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-info.textarea:active,html.theme--catppuccin-frappe .is-info.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-frappe .is-info.is-active.textarea,html.theme--catppuccin-frappe .is-info.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .is-success.textarea,html.theme--catppuccin-frappe .is-success.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6d189}html.theme--catppuccin-frappe .is-success.textarea:focus,html.theme--catppuccin-frappe .is-success.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-frappe .is-success.is-focused.textarea,html.theme--catppuccin-frappe .is-success.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-success.textarea:active,html.theme--catppuccin-frappe .is-success.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-frappe .is-success.is-active.textarea,html.theme--catppuccin-frappe .is-success.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .is-warning.textarea,html.theme--catppuccin-frappe .is-warning.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#e5c890}html.theme--catppuccin-frappe .is-warning.textarea:focus,html.theme--catppuccin-frappe .is-warning.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-frappe .is-warning.is-focused.textarea,html.theme--catppuccin-frappe .is-warning.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-warning.textarea:active,html.theme--catppuccin-frappe .is-warning.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-frappe .is-warning.is-active.textarea,html.theme--catppuccin-frappe .is-warning.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .is-danger.textarea,html.theme--catppuccin-frappe .is-danger.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#e78284}html.theme--catppuccin-frappe .is-danger.textarea:focus,html.theme--catppuccin-frappe .is-danger.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-frappe .is-danger.is-focused.textarea,html.theme--catppuccin-frappe .is-danger.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-danger.textarea:active,html.theme--catppuccin-frappe .is-danger.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-frappe .is-danger.is-active.textarea,html.theme--catppuccin-frappe .is-danger.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .is-small.textarea,html.theme--catppuccin-frappe .is-small.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-frappe .is-medium.textarea,html.theme--catppuccin-frappe .is-medium.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .is-large.textarea,html.theme--catppuccin-frappe .is-large.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .is-fullwidth.textarea,html.theme--catppuccin-frappe .is-fullwidth.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-frappe .is-inline.textarea,html.theme--catppuccin-frappe .is-inline.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-frappe .input.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-frappe .input.is-static,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-frappe .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-frappe .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-frappe .textarea[rows]{height:initial}html.theme--catppuccin-frappe .textarea.has-fixed-size{resize:none}html.theme--catppuccin-frappe .radio,html.theme--catppuccin-frappe .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-frappe .radio input,html.theme--catppuccin-frappe .checkbox input{cursor:pointer}html.theme--catppuccin-frappe .radio:hover,html.theme--catppuccin-frappe .checkbox:hover{color:#99d1db}html.theme--catppuccin-frappe .radio[disabled],html.theme--catppuccin-frappe .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-frappe .radio,fieldset[disabled] html.theme--catppuccin-frappe .checkbox,html.theme--catppuccin-frappe .radio input[disabled],html.theme--catppuccin-frappe .checkbox input[disabled]{color:#f1f4fd;cursor:not-allowed}html.theme--catppuccin-frappe .radio+.radio{margin-left:.5em}html.theme--catppuccin-frappe .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-frappe .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading)::after{border-color:#8caaee;right:1.125em;z-index:4}html.theme--catppuccin-frappe .select.is-rounded select,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-frappe .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-frappe .select select::-ms-expand{display:none}html.theme--catppuccin-frappe .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-frappe .select select:hover{border-color:#292c3c}html.theme--catppuccin-frappe .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-frappe .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-frappe .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#99d1db}html.theme--catppuccin-frappe .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-frappe .select.is-white select{border-color:#fff}html.theme--catppuccin-frappe .select.is-white select:hover,html.theme--catppuccin-frappe .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-frappe .select.is-white select:focus,html.theme--catppuccin-frappe .select.is-white select.is-focused,html.theme--catppuccin-frappe .select.is-white select:active,html.theme--catppuccin-frappe .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-frappe .select.is-black select:hover,html.theme--catppuccin-frappe .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-frappe .select.is-black select:focus,html.theme--catppuccin-frappe .select.is-black select.is-focused,html.theme--catppuccin-frappe .select.is-black select:active,html.theme--catppuccin-frappe .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-frappe .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-frappe .select.is-light select:hover,html.theme--catppuccin-frappe .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-frappe .select.is-light select:focus,html.theme--catppuccin-frappe .select.is-light select.is-focused,html.theme--catppuccin-frappe .select.is-light select:active,html.theme--catppuccin-frappe .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .select.is-dark:not(:hover)::after,html.theme--catppuccin-frappe .content kbd.select:not(:hover)::after{border-color:#414559}html.theme--catppuccin-frappe .select.is-dark select,html.theme--catppuccin-frappe .content kbd.select select{border-color:#414559}html.theme--catppuccin-frappe .select.is-dark select:hover,html.theme--catppuccin-frappe .content kbd.select select:hover,html.theme--catppuccin-frappe .select.is-dark select.is-hovered,html.theme--catppuccin-frappe .content kbd.select select.is-hovered{border-color:#363a4a}html.theme--catppuccin-frappe .select.is-dark select:focus,html.theme--catppuccin-frappe .content kbd.select select:focus,html.theme--catppuccin-frappe .select.is-dark select.is-focused,html.theme--catppuccin-frappe .content kbd.select select.is-focused,html.theme--catppuccin-frappe .select.is-dark select:active,html.theme--catppuccin-frappe .content kbd.select select:active,html.theme--catppuccin-frappe .select.is-dark select.is-active,html.theme--catppuccin-frappe .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .select.is-primary:not(:hover)::after,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-primary select,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-primary select:hover,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-frappe .select.is-primary select.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#769aeb}html.theme--catppuccin-frappe .select.is-primary select:focus,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-frappe .select.is-primary select.is-focused,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-frappe .select.is-primary select:active,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-frappe .select.is-primary select.is-active,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select.is-link:not(:hover)::after{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-link select{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-link select:hover,html.theme--catppuccin-frappe .select.is-link select.is-hovered{border-color:#769aeb}html.theme--catppuccin-frappe .select.is-link select:focus,html.theme--catppuccin-frappe .select.is-link select.is-focused,html.theme--catppuccin-frappe .select.is-link select:active,html.theme--catppuccin-frappe .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select.is-info:not(:hover)::after{border-color:#81c8be}html.theme--catppuccin-frappe .select.is-info select{border-color:#81c8be}html.theme--catppuccin-frappe .select.is-info select:hover,html.theme--catppuccin-frappe .select.is-info select.is-hovered{border-color:#6fc0b5}html.theme--catppuccin-frappe .select.is-info select:focus,html.theme--catppuccin-frappe .select.is-info select.is-focused,html.theme--catppuccin-frappe .select.is-info select:active,html.theme--catppuccin-frappe .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .select.is-success:not(:hover)::after{border-color:#a6d189}html.theme--catppuccin-frappe .select.is-success select{border-color:#a6d189}html.theme--catppuccin-frappe .select.is-success select:hover,html.theme--catppuccin-frappe .select.is-success select.is-hovered{border-color:#98ca77}html.theme--catppuccin-frappe .select.is-success select:focus,html.theme--catppuccin-frappe .select.is-success select.is-focused,html.theme--catppuccin-frappe .select.is-success select:active,html.theme--catppuccin-frappe .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .select.is-warning:not(:hover)::after{border-color:#e5c890}html.theme--catppuccin-frappe .select.is-warning select{border-color:#e5c890}html.theme--catppuccin-frappe .select.is-warning select:hover,html.theme--catppuccin-frappe .select.is-warning select.is-hovered{border-color:#e0be7b}html.theme--catppuccin-frappe .select.is-warning select:focus,html.theme--catppuccin-frappe .select.is-warning select.is-focused,html.theme--catppuccin-frappe .select.is-warning select:active,html.theme--catppuccin-frappe .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .select.is-danger:not(:hover)::after{border-color:#e78284}html.theme--catppuccin-frappe .select.is-danger select{border-color:#e78284}html.theme--catppuccin-frappe .select.is-danger select:hover,html.theme--catppuccin-frappe .select.is-danger select.is-hovered{border-color:#e36d6f}html.theme--catppuccin-frappe .select.is-danger select:focus,html.theme--catppuccin-frappe .select.is-danger select.is-focused,html.theme--catppuccin-frappe .select.is-danger select:active,html.theme--catppuccin-frappe .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .select.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-frappe .select.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .select.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .select.is-disabled::after{border-color:#f1f4fd !important;opacity:0.5}html.theme--catppuccin-frappe .select.is-fullwidth{width:100%}html.theme--catppuccin-frappe .select.is-fullwidth select{width:100%}html.theme--catppuccin-frappe .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-frappe .select.is-loading.is-small:after,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-frappe .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-frappe .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-frappe .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-frappe .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:hover .file-cta,html.theme--catppuccin-frappe .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:focus .file-cta,html.theme--catppuccin-frappe .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:active .file-cta,html.theme--catppuccin-frappe .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-black:hover .file-cta,html.theme--catppuccin-frappe .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-black:focus .file-cta,html.theme--catppuccin-frappe .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-black:active .file-cta,html.theme--catppuccin-frappe .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:hover .file-cta,html.theme--catppuccin-frappe .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:focus .file-cta,html.theme--catppuccin-frappe .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:active .file-cta,html.theme--catppuccin-frappe .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-dark .file-cta,html.theme--catppuccin-frappe .content kbd.file .file-cta{background-color:#414559;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-dark:hover .file-cta,html.theme--catppuccin-frappe .content kbd.file:hover .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-hovered .file-cta{background-color:#3c3f52;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-dark:focus .file-cta,html.theme--catppuccin-frappe .content kbd.file:focus .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-focused .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(65,69,89,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-dark:active .file-cta,html.theme--catppuccin-frappe .content kbd.file:active .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-active .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-active .file-cta{background-color:#363a4a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary:hover .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary:focus .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-focused .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(140,170,238,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-primary:active .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-active .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link .file-cta{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link:hover .file-cta,html.theme--catppuccin-frappe .file.is-link.is-hovered .file-cta{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link:focus .file-cta,html.theme--catppuccin-frappe .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(140,170,238,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-link:active .file-cta,html.theme--catppuccin-frappe .file.is-link.is-active .file-cta{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-info .file-cta{background-color:#81c8be;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:hover .file-cta,html.theme--catppuccin-frappe .file.is-info.is-hovered .file-cta{background-color:#78c4b9;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:focus .file-cta,html.theme--catppuccin-frappe .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(129,200,190,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:active .file-cta,html.theme--catppuccin-frappe .file.is-info.is-active .file-cta{background-color:#6fc0b5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success .file-cta{background-color:#a6d189;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:hover .file-cta,html.theme--catppuccin-frappe .file.is-success.is-hovered .file-cta{background-color:#9fcd80;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:focus .file-cta,html.theme--catppuccin-frappe .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,209,137,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:active .file-cta,html.theme--catppuccin-frappe .file.is-success.is-active .file-cta{background-color:#98ca77;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning .file-cta{background-color:#e5c890;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:hover .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-hovered .file-cta{background-color:#e3c386;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:focus .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(229,200,144,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:active .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-active .file-cta{background-color:#e0be7b;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-danger .file-cta{background-color:#e78284;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-danger:hover .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-hovered .file-cta{background-color:#e57779;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-danger:focus .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(231,130,132,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-danger:active .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-active .file-cta{background-color:#e36d6f;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-frappe .file.is-normal{font-size:1rem}html.theme--catppuccin-frappe .file.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-frappe .file.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-frappe .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-frappe .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-frappe .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-frappe .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-frappe .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-frappe .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-frappe .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-frappe .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-frappe .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-frappe .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-frappe .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-frappe .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-frappe .file.is-centered{justify-content:center}html.theme--catppuccin-frappe .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-frappe .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-frappe .file.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-frappe .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-frappe .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-frappe .file-label:hover .file-cta{background-color:#3c3f52;color:#b0bef1}html.theme--catppuccin-frappe .file-label:hover .file-name{border-color:#5c6279}html.theme--catppuccin-frappe .file-label:active .file-cta{background-color:#363a4a;color:#b0bef1}html.theme--catppuccin-frappe .file-label:active .file-name{border-color:#575c72}html.theme--catppuccin-frappe .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe .file-name{border-color:#626880;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-frappe .file-cta{background-color:#414559;color:#c6d0f5}html.theme--catppuccin-frappe .file-name{border-color:#626880;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-frappe .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-frappe .file-icon .fa{font-size:14px}html.theme--catppuccin-frappe .label{color:#b0bef1;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-frappe .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-frappe .label.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-frappe .label.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .label.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-frappe .help.is-white{color:#fff}html.theme--catppuccin-frappe .help.is-black{color:#0a0a0a}html.theme--catppuccin-frappe .help.is-light{color:#f5f5f5}html.theme--catppuccin-frappe .help.is-dark,html.theme--catppuccin-frappe .content kbd.help{color:#414559}html.theme--catppuccin-frappe .help.is-primary,html.theme--catppuccin-frappe .docstring>section>a.help.docs-sourcelink{color:#8caaee}html.theme--catppuccin-frappe .help.is-link{color:#8caaee}html.theme--catppuccin-frappe .help.is-info{color:#81c8be}html.theme--catppuccin-frappe .help.is-success{color:#a6d189}html.theme--catppuccin-frappe .help.is-warning{color:#e5c890}html.theme--catppuccin-frappe .help.is-danger{color:#e78284}html.theme--catppuccin-frappe .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-frappe .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-frappe .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-frappe .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-frappe .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-frappe .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-frappe .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-frappe .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-frappe .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field.is-horizontal{display:flex}}html.theme--catppuccin-frappe .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-frappe .field-label.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-frappe .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-frappe .field-body .field{margin-bottom:0}html.theme--catppuccin-frappe .field-body>.field{flex-shrink:1}html.theme--catppuccin-frappe .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-frappe .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-frappe .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-frappe .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select:focus~.icon{color:#414559}html.theme--catppuccin-frappe .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-frappe .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-frappe .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-frappe .control.has-icons-left .icon,html.theme--catppuccin-frappe .control.has-icons-right .icon{color:#626880;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-frappe .control.has-icons-left .input,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-frappe .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-frappe .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-frappe .control.has-icons-right .input,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-frappe .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-frappe .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-frappe .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-frappe .control.is-loading.is-small:after,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-frappe .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-frappe .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-frappe .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-frappe .breadcrumb a{align-items:center;color:#8caaee;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-frappe .breadcrumb a:hover{color:#99d1db}html.theme--catppuccin-frappe .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-frappe .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-frappe .breadcrumb li.is-active a{color:#b0bef1;cursor:default;pointer-events:none}html.theme--catppuccin-frappe .breadcrumb li+li::before{color:#737994;content:"\0002f"}html.theme--catppuccin-frappe .breadcrumb ul,html.theme--catppuccin-frappe .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-frappe .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-frappe .breadcrumb.is-centered ol,html.theme--catppuccin-frappe .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-frappe .breadcrumb.is-right ol,html.theme--catppuccin-frappe .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-frappe .breadcrumb.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-frappe .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-frappe .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-frappe .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-frappe .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-frappe .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#c6d0f5;max-width:100%;position:relative}html.theme--catppuccin-frappe .card-footer:first-child,html.theme--catppuccin-frappe .card-content:first-child,html.theme--catppuccin-frappe .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-frappe .card-footer:last-child,html.theme--catppuccin-frappe .card-content:last-child,html.theme--catppuccin-frappe .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-frappe .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-frappe .card-header-title{align-items:center;color:#b0bef1;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-frappe .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-frappe .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-frappe .card-image{display:block;position:relative}html.theme--catppuccin-frappe .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-frappe .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-frappe .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-frappe .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-frappe .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-frappe .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-frappe .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-frappe .dropdown.is-active .dropdown-menu,html.theme--catppuccin-frappe .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-frappe .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-frappe .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-frappe .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-frappe .dropdown-content{background-color:#292c3c;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-frappe .dropdown-item{color:#c6d0f5;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-frappe a.dropdown-item,html.theme--catppuccin-frappe button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-frappe a.dropdown-item:hover,html.theme--catppuccin-frappe button.dropdown-item:hover{background-color:#292c3c;color:#0a0a0a}html.theme--catppuccin-frappe a.dropdown-item.is-active,html.theme--catppuccin-frappe button.dropdown-item.is-active{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-frappe .level{align-items:center;justify-content:space-between}html.theme--catppuccin-frappe .level code{border-radius:.4em}html.theme--catppuccin-frappe .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-frappe .level.is-mobile{display:flex}html.theme--catppuccin-frappe .level.is-mobile .level-left,html.theme--catppuccin-frappe .level.is-mobile .level-right{display:flex}html.theme--catppuccin-frappe .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-frappe .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-frappe .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level{display:flex}html.theme--catppuccin-frappe .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-frappe .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-frappe .level-item .title,html.theme--catppuccin-frappe .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-frappe .level-left,html.theme--catppuccin-frappe .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .level-left .level-item.is-flexible,html.theme--catppuccin-frappe .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-left .level-item:not(:last-child),html.theme--catppuccin-frappe .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-frappe .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-left{display:flex}}html.theme--catppuccin-frappe .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-right{display:flex}}html.theme--catppuccin-frappe .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-frappe .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-frappe .media .media{border-top:1px solid rgba(98,104,128,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-frappe .media .media .content:not(:last-child),html.theme--catppuccin-frappe .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-frappe .media .media .media{padding-top:.5rem}html.theme--catppuccin-frappe .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-frappe .media+.media{border-top:1px solid rgba(98,104,128,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-frappe .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-frappe .media-left,html.theme--catppuccin-frappe .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .media-left{margin-right:1rem}html.theme--catppuccin-frappe .media-right{margin-left:1rem}html.theme--catppuccin-frappe .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .media-content{overflow-x:auto}}html.theme--catppuccin-frappe .menu{font-size:1rem}html.theme--catppuccin-frappe .menu.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-frappe .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .menu.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .menu-list{line-height:1.25}html.theme--catppuccin-frappe .menu-list a{border-radius:3px;color:#c6d0f5;display:block;padding:0.5em 0.75em}html.theme--catppuccin-frappe .menu-list a:hover{background-color:#292c3c;color:#b0bef1}html.theme--catppuccin-frappe .menu-list a.is-active{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .menu-list li ul{border-left:1px solid #626880;margin:.75em;padding-left:.75em}html.theme--catppuccin-frappe .menu-label{color:#f1f4fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-frappe .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-frappe .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-frappe .message{background-color:#292c3c;border-radius:.4em;font-size:1rem}html.theme--catppuccin-frappe .message strong{color:currentColor}html.theme--catppuccin-frappe .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-frappe .message.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-frappe .message.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .message.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .message.is-white{background-color:#fff}html.theme--catppuccin-frappe .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-frappe .message.is-black{background-color:#fafafa}html.theme--catppuccin-frappe .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-frappe .message.is-light{background-color:#fafafa}html.theme--catppuccin-frappe .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-frappe .message.is-dark,html.theme--catppuccin-frappe .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-frappe .message.is-dark .message-header,html.theme--catppuccin-frappe .content kbd.message .message-header{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .message.is-dark .message-body,html.theme--catppuccin-frappe .content kbd.message .message-body{border-color:#414559}html.theme--catppuccin-frappe .message.is-primary,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink{background-color:#edf2fc}html.theme--catppuccin-frappe .message.is-primary .message-header,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink .message-header{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .message.is-primary .message-body,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink .message-body{border-color:#8caaee;color:#153a8e}html.theme--catppuccin-frappe .message.is-link{background-color:#edf2fc}html.theme--catppuccin-frappe .message.is-link .message-header{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .message.is-link .message-body{border-color:#8caaee;color:#153a8e}html.theme--catppuccin-frappe .message.is-info{background-color:#f1f9f8}html.theme--catppuccin-frappe .message.is-info .message-header{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-info .message-body{border-color:#81c8be;color:#2d675f}html.theme--catppuccin-frappe .message.is-success{background-color:#f4f9f0}html.theme--catppuccin-frappe .message.is-success .message-header{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-success .message-body{border-color:#a6d189;color:#446a29}html.theme--catppuccin-frappe .message.is-warning{background-color:#fbf7ee}html.theme--catppuccin-frappe .message.is-warning .message-header{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-warning .message-body{border-color:#e5c890;color:#78591c}html.theme--catppuccin-frappe .message.is-danger{background-color:#fceeee}html.theme--catppuccin-frappe .message.is-danger .message-header{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .message.is-danger .message-body{border-color:#e78284;color:#9a1e20}html.theme--catppuccin-frappe .message-header{align-items:center;background-color:#c6d0f5;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-frappe .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-frappe .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .message-body{border-color:#626880;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#c6d0f5;padding:1.25em 1.5em}html.theme--catppuccin-frappe .message-body code,html.theme--catppuccin-frappe .message-body pre{background-color:#fff}html.theme--catppuccin-frappe .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-frappe .modal.is-active{display:flex}html.theme--catppuccin-frappe .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-frappe .modal-content,html.theme--catppuccin-frappe .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-frappe .modal-content,html.theme--catppuccin-frappe .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-frappe .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-frappe .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-frappe .modal-card-head,html.theme--catppuccin-frappe .modal-card-foot{align-items:center;background-color:#292c3c;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-frappe .modal-card-head{border-bottom:1px solid #626880;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-frappe .modal-card-title{color:#c6d0f5;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-frappe .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #626880}html.theme--catppuccin-frappe .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-frappe .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#303446;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-frappe .navbar{background-color:#8caaee;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-frappe .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-frappe .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-frappe .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-dark,html.theme--catppuccin-frappe .content kbd.navbar{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-burger,html.theme--catppuccin-frappe .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#414559;color:#fff}}html.theme--catppuccin-frappe .navbar.is-primary,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-burger,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee;color:#fff}}html.theme--catppuccin-frappe .navbar.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee;color:#fff}}html.theme--catppuccin-frappe .navbar.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#81c8be;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6d189;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#e5c890;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#e78284;color:#fff}}html.theme--catppuccin-frappe .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-frappe .navbar.has-shadow{box-shadow:0 2px 0 0 #292c3c}html.theme--catppuccin-frappe .navbar.is-fixed-bottom,html.theme--catppuccin-frappe .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #292c3c}html.theme--catppuccin-frappe .navbar.is-fixed-top{top:0}html.theme--catppuccin-frappe html.has-navbar-fixed-top,html.theme--catppuccin-frappe body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-frappe .navbar-brand,html.theme--catppuccin-frappe .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-frappe .navbar-brand a.navbar-item:focus,html.theme--catppuccin-frappe .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-frappe .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-frappe .navbar-burger{color:#c6d0f5;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-frappe .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--catppuccin-frappe .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-frappe .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-frappe .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-frappe .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-frappe .navbar-menu{display:none}html.theme--catppuccin-frappe .navbar-item,html.theme--catppuccin-frappe .navbar-link{color:#c6d0f5;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-frappe .navbar-item .icon:only-child,html.theme--catppuccin-frappe .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-frappe a.navbar-item,html.theme--catppuccin-frappe .navbar-link{cursor:pointer}html.theme--catppuccin-frappe a.navbar-item:focus,html.theme--catppuccin-frappe a.navbar-item:focus-within,html.theme--catppuccin-frappe a.navbar-item:hover,html.theme--catppuccin-frappe a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar-link:focus,html.theme--catppuccin-frappe .navbar-link:focus-within,html.theme--catppuccin-frappe .navbar-link:hover,html.theme--catppuccin-frappe .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#8caaee}html.theme--catppuccin-frappe .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .navbar-item img{max-height:1.75rem}html.theme--catppuccin-frappe .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-frappe .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-frappe .navbar-item.is-tab:focus,html.theme--catppuccin-frappe .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#8caaee}html.theme--catppuccin-frappe .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#8caaee;border-bottom-style:solid;border-bottom-width:3px;color:#8caaee;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-frappe .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-frappe .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-frappe .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-frappe .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .navbar>.container{display:block}html.theme--catppuccin-frappe .navbar-brand .navbar-item,html.theme--catppuccin-frappe .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-frappe .navbar-link::after{display:none}html.theme--catppuccin-frappe .navbar-menu{background-color:#8caaee;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-frappe .navbar-menu.is-active{display:block}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch,html.theme--catppuccin-frappe .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-frappe .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-frappe .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-frappe html.has-navbar-fixed-top-touch,html.theme--catppuccin-frappe body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar,html.theme--catppuccin-frappe .navbar-menu,html.theme--catppuccin-frappe .navbar-start,html.theme--catppuccin-frappe .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-frappe .navbar{min-height:4rem}html.theme--catppuccin-frappe .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-frappe .navbar.is-spaced .navbar-start,html.theme--catppuccin-frappe .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-frappe .navbar.is-spaced a.navbar-item,html.theme--catppuccin-frappe .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#838ba7}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8caaee}html.theme--catppuccin-frappe .navbar-burger{display:none}html.theme--catppuccin-frappe .navbar-item,html.theme--catppuccin-frappe .navbar-link{align-items:center;display:flex}html.theme--catppuccin-frappe .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-frappe .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-frappe .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-frappe .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-frappe .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-frappe .navbar-dropdown{background-color:#8caaee;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-frappe .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#838ba7}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8caaee}.navbar.is-spaced html.theme--catppuccin-frappe .navbar-dropdown,html.theme--catppuccin-frappe .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-frappe .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-frappe .navbar-divider{display:block}html.theme--catppuccin-frappe .navbar>.container .navbar-brand,html.theme--catppuccin-frappe .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-frappe .navbar>.container .navbar-menu,html.theme--catppuccin-frappe .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-frappe .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-frappe html.has-navbar-fixed-top-desktop,html.theme--catppuccin-frappe body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-frappe html.has-spaced-navbar-fixed-top,html.theme--catppuccin-frappe body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-frappe html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-frappe body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-frappe a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar-link.is-active{color:#8caaee}html.theme--catppuccin-frappe a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-frappe .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-frappe .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-frappe .pagination.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-frappe .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .pagination.is-rounded .pagination-previous,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-frappe .pagination.is-rounded .pagination-next,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-frappe .pagination.is-rounded .pagination-link,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-frappe .pagination,html.theme--catppuccin-frappe .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link{border-color:#626880;color:#8caaee;min-width:2.5em}html.theme--catppuccin-frappe .pagination-previous:hover,html.theme--catppuccin-frappe .pagination-next:hover,html.theme--catppuccin-frappe .pagination-link:hover{border-color:#737994;color:#99d1db}html.theme--catppuccin-frappe .pagination-previous:focus,html.theme--catppuccin-frappe .pagination-next:focus,html.theme--catppuccin-frappe .pagination-link:focus{border-color:#737994}html.theme--catppuccin-frappe .pagination-previous:active,html.theme--catppuccin-frappe .pagination-next:active,html.theme--catppuccin-frappe .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-frappe .pagination-previous[disabled],html.theme--catppuccin-frappe .pagination-previous.is-disabled,html.theme--catppuccin-frappe .pagination-next[disabled],html.theme--catppuccin-frappe .pagination-next.is-disabled,html.theme--catppuccin-frappe .pagination-link[disabled],html.theme--catppuccin-frappe .pagination-link.is-disabled{background-color:#626880;border-color:#626880;box-shadow:none;color:#f1f4fd;opacity:0.5}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-frappe .pagination-link.is-current{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .pagination-ellipsis{color:#737994;pointer-events:none}html.theme--catppuccin-frappe .pagination-list{flex-wrap:wrap}html.theme--catppuccin-frappe .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .pagination{flex-wrap:wrap}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-frappe .pagination-previous{order:2}html.theme--catppuccin-frappe .pagination-next{order:3}html.theme--catppuccin-frappe .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-frappe .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-frappe .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-frappe .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-frappe .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-frappe .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-frappe .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-frappe .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-frappe .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-frappe .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-frappe .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-frappe .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-frappe .panel.is-dark .panel-heading,html.theme--catppuccin-frappe .content kbd.panel .panel-heading{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-frappe .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#414559}html.theme--catppuccin-frappe .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-frappe .content kbd.panel .panel-block.is-active .panel-icon{color:#414559}html.theme--catppuccin-frappe .panel.is-primary .panel-heading,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#8caaee}html.theme--catppuccin-frappe .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel.is-link .panel-heading{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .panel.is-link .panel-tabs a.is-active{border-bottom-color:#8caaee}html.theme--catppuccin-frappe .panel.is-link .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel.is-info .panel-heading{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-info .panel-tabs a.is-active{border-bottom-color:#81c8be}html.theme--catppuccin-frappe .panel.is-info .panel-block.is-active .panel-icon{color:#81c8be}html.theme--catppuccin-frappe .panel.is-success .panel-heading{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6d189}html.theme--catppuccin-frappe .panel.is-success .panel-block.is-active .panel-icon{color:#a6d189}html.theme--catppuccin-frappe .panel.is-warning .panel-heading{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#e5c890}html.theme--catppuccin-frappe .panel.is-warning .panel-block.is-active .panel-icon{color:#e5c890}html.theme--catppuccin-frappe .panel.is-danger .panel-heading{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#e78284}html.theme--catppuccin-frappe .panel.is-danger .panel-block.is-active .panel-icon{color:#e78284}html.theme--catppuccin-frappe .panel-tabs:not(:last-child),html.theme--catppuccin-frappe .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-frappe .panel-heading{background-color:#51576d;border-radius:8px 8px 0 0;color:#b0bef1;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-frappe .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-frappe .panel-tabs a{border-bottom:1px solid #626880;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-frappe .panel-tabs a.is-active{border-bottom-color:#51576d;color:#769aeb}html.theme--catppuccin-frappe .panel-list a{color:#c6d0f5}html.theme--catppuccin-frappe .panel-list a:hover{color:#8caaee}html.theme--catppuccin-frappe .panel-block{align-items:center;color:#b0bef1;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-frappe .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-frappe .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-frappe .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-frappe .panel-block.is-active{border-left-color:#8caaee;color:#769aeb}html.theme--catppuccin-frappe .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-frappe a.panel-block,html.theme--catppuccin-frappe label.panel-block{cursor:pointer}html.theme--catppuccin-frappe a.panel-block:hover,html.theme--catppuccin-frappe label.panel-block:hover{background-color:#292c3c}html.theme--catppuccin-frappe .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f1f4fd;margin-right:.75em}html.theme--catppuccin-frappe .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-frappe .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--catppuccin-frappe .tabs a{align-items:center;border-bottom-color:#626880;border-bottom-style:solid;border-bottom-width:1px;color:#c6d0f5;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-frappe .tabs a:hover{border-bottom-color:#b0bef1;color:#b0bef1}html.theme--catppuccin-frappe .tabs li{display:block}html.theme--catppuccin-frappe .tabs li.is-active a{border-bottom-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .tabs ul{align-items:center;border-bottom-color:#626880;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-frappe .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-frappe .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-frappe .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-frappe .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-frappe .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-frappe .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-frappe .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-frappe .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-frappe .tabs.is-boxed a:hover{background-color:#292c3c;border-bottom-color:#626880}html.theme--catppuccin-frappe .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#626880;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-frappe .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .tabs.is-toggle a{border-color:#626880;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-frappe .tabs.is-toggle a:hover{background-color:#292c3c;border-color:#737994;z-index:2}html.theme--catppuccin-frappe .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-frappe .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-frappe .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-frappe .tabs.is-toggle li.is-active a{background-color:#8caaee;border-color:#8caaee;color:#fff;z-index:1}html.theme--catppuccin-frappe .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-frappe .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-frappe .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-frappe .tabs.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-frappe .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .column.is-narrow,html.theme--catppuccin-frappe .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full,html.theme--catppuccin-frappe .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters,html.theme--catppuccin-frappe .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds,html.theme--catppuccin-frappe .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half,html.theme--catppuccin-frappe .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third,html.theme--catppuccin-frappe .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter,html.theme--catppuccin-frappe .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth,html.theme--catppuccin-frappe .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths,html.theme--catppuccin-frappe .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths,html.theme--catppuccin-frappe .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths,html.theme--catppuccin-frappe .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters,html.theme--catppuccin-frappe .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds,html.theme--catppuccin-frappe .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half,html.theme--catppuccin-frappe .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third,html.theme--catppuccin-frappe .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter,html.theme--catppuccin-frappe .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth,html.theme--catppuccin-frappe .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths,html.theme--catppuccin-frappe .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths,html.theme--catppuccin-frappe .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths,html.theme--catppuccin-frappe .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-frappe .column.is-0,html.theme--catppuccin-frappe .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0,html.theme--catppuccin-frappe .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-frappe .column.is-1,html.theme--catppuccin-frappe .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1,html.theme--catppuccin-frappe .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2,html.theme--catppuccin-frappe .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2,html.theme--catppuccin-frappe .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3,html.theme--catppuccin-frappe .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3,html.theme--catppuccin-frappe .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-frappe .column.is-4,html.theme--catppuccin-frappe .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4,html.theme--catppuccin-frappe .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5,html.theme--catppuccin-frappe .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5,html.theme--catppuccin-frappe .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6,html.theme--catppuccin-frappe .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6,html.theme--catppuccin-frappe .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-frappe .column.is-7,html.theme--catppuccin-frappe .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7,html.theme--catppuccin-frappe .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8,html.theme--catppuccin-frappe .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8,html.theme--catppuccin-frappe .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9,html.theme--catppuccin-frappe .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9,html.theme--catppuccin-frappe .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-frappe .column.is-10,html.theme--catppuccin-frappe .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10,html.theme--catppuccin-frappe .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11,html.theme--catppuccin-frappe .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11,html.theme--catppuccin-frappe .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12,html.theme--catppuccin-frappe .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12,html.theme--catppuccin-frappe .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-frappe .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-frappe .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-frappe .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-frappe .columns.is-centered{justify-content:center}html.theme--catppuccin-frappe .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-frappe .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-frappe .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-frappe .columns.is-mobile{display:flex}html.theme--catppuccin-frappe .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-frappe .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-desktop{display:flex}}html.theme--catppuccin-frappe .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-frappe .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-frappe .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-frappe .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-frappe .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-frappe .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-frappe .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-frappe .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-frappe .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-frappe .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-frappe .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-frappe .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-frappe .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-frappe .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-frappe .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-frappe .tile.is-child{margin:0 !important}html.theme--catppuccin-frappe .tile.is-parent{padding:.75rem}html.theme--catppuccin-frappe .tile.is-vertical{flex-direction:column}html.theme--catppuccin-frappe .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .tile:not(.is-child){display:flex}html.theme--catppuccin-frappe .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .tile.is-3{flex:none;width:25%}html.theme--catppuccin-frappe .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .tile.is-6{flex:none;width:50%}html.theme--catppuccin-frappe .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .tile.is-9{flex:none;width:75%}html.theme--catppuccin-frappe .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-frappe .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-frappe .hero .navbar{background:none}html.theme--catppuccin-frappe .hero .tabs ul{border-bottom:none}html.theme--catppuccin-frappe .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-white strong{color:inherit}html.theme--catppuccin-frappe .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-frappe .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-frappe .hero.is-white .navbar-item,html.theme--catppuccin-frappe .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-frappe .hero.is-white a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-white .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-frappe .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-frappe .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-black strong{color:inherit}html.theme--catppuccin-frappe .hero.is-black .title{color:#fff}html.theme--catppuccin-frappe .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-frappe .hero.is-black .navbar-item,html.theme--catppuccin-frappe .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-black a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-black .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-frappe .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-light strong{color:inherit}html.theme--catppuccin-frappe .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-frappe .hero.is-light .navbar-item,html.theme--catppuccin-frappe .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-light .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-frappe .hero.is-dark,html.theme--catppuccin-frappe .content kbd.hero{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-dark strong,html.theme--catppuccin-frappe .content kbd.hero strong{color:inherit}html.theme--catppuccin-frappe .hero.is-dark .title,html.theme--catppuccin-frappe .content kbd.hero .title{color:#fff}html.theme--catppuccin-frappe .hero.is-dark .subtitle,html.theme--catppuccin-frappe .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-frappe .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-dark .subtitle strong,html.theme--catppuccin-frappe .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-dark .navbar-menu,html.theme--catppuccin-frappe .content kbd.hero .navbar-menu{background-color:#414559}}html.theme--catppuccin-frappe .hero.is-dark .navbar-item,html.theme--catppuccin-frappe .content kbd.hero .navbar-item,html.theme--catppuccin-frappe .hero.is-dark .navbar-link,html.theme--catppuccin-frappe .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-dark .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.hero .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.hero .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .hero.is-dark .tabs a,html.theme--catppuccin-frappe .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-dark .tabs a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs li.is-active a{color:#414559 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#414559}html.theme--catppuccin-frappe .hero.is-dark.is-bold,html.theme--catppuccin-frappe .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #262f41 0%, #414559 71%, #47476c 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-frappe .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #262f41 0%, #414559 71%, #47476c 100%)}}html.theme--catppuccin-frappe .hero.is-primary,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-primary strong,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-frappe .hero.is-primary .title,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-frappe .hero.is-primary .subtitle,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-primary .subtitle strong,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-primary .navbar-menu,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#8caaee}}html.theme--catppuccin-frappe .hero.is-primary .navbar-item,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-frappe .hero.is-primary .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-primary .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .hero.is-primary .tabs a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-primary .tabs a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#8caaee !important;opacity:1}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .hero.is-primary.is-bold,html.theme--catppuccin-frappe .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-frappe .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}}html.theme--catppuccin-frappe .hero.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-link strong{color:inherit}html.theme--catppuccin-frappe .hero.is-link .title{color:#fff}html.theme--catppuccin-frappe .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-link .navbar-menu{background-color:#8caaee}}html.theme--catppuccin-frappe .hero.is-link .navbar-item,html.theme--catppuccin-frappe .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-link a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-link .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-link .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-link .tabs li.is-active a{color:#8caaee !important;opacity:1}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .hero.is-link.is-bold{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}}html.theme--catppuccin-frappe .hero.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-info strong{color:inherit}html.theme--catppuccin-frappe .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-info .navbar-menu{background-color:#81c8be}}html.theme--catppuccin-frappe .hero.is-info .navbar-item,html.theme--catppuccin-frappe .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-info .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-info .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-info .tabs li.is-active a{color:#81c8be !important;opacity:1}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .hero.is-info.is-bold{background-image:linear-gradient(141deg, #52c4a1 0%, #81c8be 71%, #8fd2d4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #52c4a1 0%, #81c8be 71%, #8fd2d4 100%)}}html.theme--catppuccin-frappe .hero.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-success strong{color:inherit}html.theme--catppuccin-frappe .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-success .navbar-menu{background-color:#a6d189}}html.theme--catppuccin-frappe .hero.is-success .navbar-item,html.theme--catppuccin-frappe .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-success .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-success .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-success .tabs li.is-active a{color:#a6d189 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .hero.is-success.is-bold{background-image:linear-gradient(141deg, #9ccd5a 0%, #a6d189 71%, #a8dc98 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #9ccd5a 0%, #a6d189 71%, #a8dc98 100%)}}html.theme--catppuccin-frappe .hero.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-warning strong{color:inherit}html.theme--catppuccin-frappe .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-warning .navbar-menu{background-color:#e5c890}}html.theme--catppuccin-frappe .hero.is-warning .navbar-item,html.theme--catppuccin-frappe .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-warning .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-warning .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-warning .tabs li.is-active a{color:#e5c890 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #e5a05d 0%, #e5c890 71%, #ede0a2 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e5a05d 0%, #e5c890 71%, #ede0a2 100%)}}html.theme--catppuccin-frappe .hero.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-danger strong{color:inherit}html.theme--catppuccin-frappe .hero.is-danger .title{color:#fff}html.theme--catppuccin-frappe .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-danger .navbar-menu{background-color:#e78284}}html.theme--catppuccin-frappe .hero.is-danger .navbar-item,html.theme--catppuccin-frappe .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-danger .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-danger .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-danger .tabs li.is-active a{color:#e78284 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#e78284}html.theme--catppuccin-frappe .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #e94d6a 0%, #e78284 71%, #eea294 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e94d6a 0%, #e78284 71%, #eea294 100%)}}html.theme--catppuccin-frappe .hero.is-small .hero-body,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-frappe .hero.is-halfheight .hero-body,html.theme--catppuccin-frappe .hero.is-fullheight .hero-body,html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-frappe .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-frappe .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-frappe .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-frappe .hero-video{overflow:hidden}html.theme--catppuccin-frappe .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-frappe .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero-video{display:none}}html.theme--catppuccin-frappe .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero-buttons .button{display:flex}html.theme--catppuccin-frappe .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-frappe .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-frappe .hero-head,html.theme--catppuccin-frappe .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero-body{padding:3rem 3rem}}html.theme--catppuccin-frappe .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .section{padding:3rem 3rem}html.theme--catppuccin-frappe .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-frappe .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-frappe .footer{background-color:#292c3c;padding:3rem 1.5rem 6rem}html.theme--catppuccin-frappe h1 .docs-heading-anchor,html.theme--catppuccin-frappe h1 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h1 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h2 .docs-heading-anchor,html.theme--catppuccin-frappe h2 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h2 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h3 .docs-heading-anchor,html.theme--catppuccin-frappe h3 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h3 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h4 .docs-heading-anchor,html.theme--catppuccin-frappe h4 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h4 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h5 .docs-heading-anchor,html.theme--catppuccin-frappe h5 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h5 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h6 .docs-heading-anchor,html.theme--catppuccin-frappe h6 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h6 .docs-heading-anchor:visited{color:#c6d0f5}html.theme--catppuccin-frappe h1 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h2 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h3 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h4 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h5 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-frappe h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-frappe h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-frappe .docs-light-only{display:none !important}html.theme--catppuccin-frappe pre{position:relative;overflow:hidden}html.theme--catppuccin-frappe pre code,html.theme--catppuccin-frappe pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-frappe pre code:first-of-type,html.theme--catppuccin-frappe pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-frappe pre code:last-of-type,html.theme--catppuccin-frappe pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-frappe pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#c6d0f5;cursor:pointer;text-align:center}html.theme--catppuccin-frappe pre .copy-button:focus,html.theme--catppuccin-frappe pre .copy-button:hover{opacity:1;background:rgba(198,208,245,0.1);color:#8caaee}html.theme--catppuccin-frappe pre .copy-button.success{color:#a6d189;opacity:1}html.theme--catppuccin-frappe pre .copy-button.error{color:#e78284;opacity:1}html.theme--catppuccin-frappe pre:hover .copy-button{opacity:1}html.theme--catppuccin-frappe .admonition{background-color:#292c3c;border-style:solid;border-width:2px;border-color:#b5bfe2;border-radius:4px;font-size:1rem}html.theme--catppuccin-frappe .admonition strong{color:currentColor}html.theme--catppuccin-frappe .admonition.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-frappe .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .admonition.is-default{background-color:#292c3c;border-color:#b5bfe2}html.theme--catppuccin-frappe .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#b5bfe2}html.theme--catppuccin-frappe .admonition.is-default>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-info{background-color:#292c3c;border-color:#81c8be}html.theme--catppuccin-frappe .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#81c8be}html.theme--catppuccin-frappe .admonition.is-info>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-success{background-color:#292c3c;border-color:#a6d189}html.theme--catppuccin-frappe .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6d189}html.theme--catppuccin-frappe .admonition.is-success>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-warning{background-color:#292c3c;border-color:#e5c890}html.theme--catppuccin-frappe .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#e5c890}html.theme--catppuccin-frappe .admonition.is-warning>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-danger{background-color:#292c3c;border-color:#e78284}html.theme--catppuccin-frappe .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#e78284}html.theme--catppuccin-frappe .admonition.is-danger>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-compat{background-color:#292c3c;border-color:#99d1db}html.theme--catppuccin-frappe .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#99d1db}html.theme--catppuccin-frappe .admonition.is-compat>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition-header{color:#b5bfe2;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-frappe .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-frappe details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-frappe details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-frappe details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-frappe .admonition-body{color:#c6d0f5;padding:0.5rem .75rem}html.theme--catppuccin-frappe .admonition-body pre{background-color:#292c3c}html.theme--catppuccin-frappe .admonition-body code{background-color:#292c3c}html.theme--catppuccin-frappe .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #626880;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-frappe .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#292c3c;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #626880;overflow:auto}html.theme--catppuccin-frappe .docstring>header code{background-color:transparent}html.theme--catppuccin-frappe .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-frappe .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-frappe .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-frappe .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #626880}html.theme--catppuccin-frappe .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-frappe .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-frappe .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-frappe .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-frappe .documenter-example-output{background-color:#303446}html.theme--catppuccin-frappe .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#292c3c;color:#c6d0f5;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-frappe .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-frappe .outdated-warning-overlay a{color:#8caaee}html.theme--catppuccin-frappe .outdated-warning-overlay a:hover{color:#99d1db}html.theme--catppuccin-frappe .content pre{border:2px solid #626880;border-radius:4px}html.theme--catppuccin-frappe .content code{font-weight:inherit}html.theme--catppuccin-frappe .content a code{color:#8caaee}html.theme--catppuccin-frappe .content a:hover code{color:#99d1db}html.theme--catppuccin-frappe .content h1 code,html.theme--catppuccin-frappe .content h2 code,html.theme--catppuccin-frappe .content h3 code,html.theme--catppuccin-frappe .content h4 code,html.theme--catppuccin-frappe .content h5 code,html.theme--catppuccin-frappe .content h6 code{color:#c6d0f5}html.theme--catppuccin-frappe .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-frappe .content blockquote>ul:first-child,html.theme--catppuccin-frappe .content blockquote>ol:first-child,html.theme--catppuccin-frappe .content .admonition-body>ul:first-child,html.theme--catppuccin-frappe .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-frappe pre,html.theme--catppuccin-frappe code{font-variant-ligatures:no-contextual}html.theme--catppuccin-frappe .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-frappe .breadcrumb a.is-disabled,html.theme--catppuccin-frappe .breadcrumb a.is-disabled:hover{color:#b0bef1}html.theme--catppuccin-frappe .hljs{background:initial !important}html.theme--catppuccin-frappe .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-frappe .katex-display,html.theme--catppuccin-frappe mjx-container,html.theme--catppuccin-frappe .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-frappe html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-frappe li.no-marker{list-style:none}html.theme--catppuccin-frappe #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-frappe #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main{width:100%}html.theme--catppuccin-frappe #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-frappe #documenter .docs-main>header,html.theme--catppuccin-frappe #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar{background-color:#303446;border-bottom:1px solid #626880;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-frappe #documenter .docs-main section.footnotes{border-top:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-frappe .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #626880;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-frappe #documenter .docs-sidebar{display:flex;flex-direction:column;color:#c6d0f5;background-color:#292c3c;border-right:1px solid #626880;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-frappe #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name a:hover{color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #626880;display:none;padding:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #626880;padding-bottom:1.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#c6d0f5;background:#292c3c}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#c6d0f5;background-color:#313548}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #626880;border-bottom:1px solid #626880;background-color:#232634}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#232634;color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#313548;color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-frappe #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3a3e54}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4a506c}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3a3e54}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4a506c}}html.theme--catppuccin-frappe kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-frappe .search-min-width-50{min-width:50%}html.theme--catppuccin-frappe .search-min-height-100{min-height:100%}html.theme--catppuccin-frappe .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-frappe .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover,html.theme--catppuccin-frappe .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-frappe .search-result-link .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-frappe .property-search-result-badge,html.theme--catppuccin-frappe .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-frappe .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:hover .search-filter,html.theme--catppuccin-frappe .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-frappe .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-frappe .search-filter:hover,html.theme--catppuccin-frappe .search-filter:focus{color:#333}html.theme--catppuccin-frappe .search-filter-selected{color:#414559;background-color:#babbf1}html.theme--catppuccin-frappe .search-filter-selected:hover,html.theme--catppuccin-frappe .search-filter-selected:focus{color:#414559}html.theme--catppuccin-frappe .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-frappe .search-divider{border-bottom:1px solid #626880}html.theme--catppuccin-frappe .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-frappe .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-frappe .w-100{width:100%}html.theme--catppuccin-frappe .gap-2{gap:0.5rem}html.theme--catppuccin-frappe .gap-4{gap:1rem}html.theme--catppuccin-frappe .gap-8{gap:2rem}html.theme--catppuccin-frappe{background-color:#303446;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-frappe a{transition:all 200ms ease}html.theme--catppuccin-frappe .label{color:#c6d0f5}html.theme--catppuccin-frappe .button,html.theme--catppuccin-frappe .control.has-icons-left .icon,html.theme--catppuccin-frappe .control.has-icons-right .icon,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .select,html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea{height:2.5em;color:#c6d0f5}html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#c6d0f5}html.theme--catppuccin-frappe .select:after,html.theme--catppuccin-frappe .select select{border-width:1px}html.theme--catppuccin-frappe .menu-list a{transition:all 300ms ease}html.theme--catppuccin-frappe .modal-card-foot,html.theme--catppuccin-frappe .modal-card-head{border-color:#626880}html.theme--catppuccin-frappe .navbar{border-radius:.4em}html.theme--catppuccin-frappe .navbar.is-transparent{background:none}html.theme--catppuccin-frappe .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .navbar .navbar-menu{background-color:#8caaee;border-radius:0 0 .4em .4em}}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){color:#414559}html.theme--catppuccin-frappe .tag.is-link:not(body),html.theme--catppuccin-frappe .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-frappe .content kbd.is-link:not(body){color:#414559}html.theme--catppuccin-frappe .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-frappe .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-frappe .ansi span.sgr3{font-style:italic}html.theme--catppuccin-frappe .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-frappe .ansi span.sgr7{color:#303446;background-color:#c6d0f5}html.theme--catppuccin-frappe .ansi span.sgr8{color:transparent}html.theme--catppuccin-frappe .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-frappe .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-frappe .ansi span.sgr30{color:#51576d}html.theme--catppuccin-frappe .ansi span.sgr31{color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr32{color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr33{color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr34{color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr35{color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr36{color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr37{color:#b5bfe2}html.theme--catppuccin-frappe .ansi span.sgr40{background-color:#51576d}html.theme--catppuccin-frappe .ansi span.sgr41{background-color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr42{background-color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr43{background-color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr44{background-color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr45{background-color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr46{background-color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr47{background-color:#b5bfe2}html.theme--catppuccin-frappe .ansi span.sgr90{color:#626880}html.theme--catppuccin-frappe .ansi span.sgr91{color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr92{color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr93{color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr94{color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr95{color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr96{color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr97{color:#a5adce}html.theme--catppuccin-frappe .ansi span.sgr100{background-color:#626880}html.theme--catppuccin-frappe .ansi span.sgr101{background-color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr102{background-color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr103{background-color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr104{background-color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr105{background-color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr106{background-color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr107{background-color:#a5adce}html.theme--catppuccin-frappe code.language-julia-repl>span.hljs-meta{color:#a6d189;font-weight:bolder}html.theme--catppuccin-frappe code .hljs{color:#c6d0f5;background:#303446}html.theme--catppuccin-frappe code .hljs-keyword{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-built_in{color:#e78284}html.theme--catppuccin-frappe code .hljs-type{color:#e5c890}html.theme--catppuccin-frappe code .hljs-literal{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-number{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-operator{color:#81c8be}html.theme--catppuccin-frappe code .hljs-punctuation{color:#b5bfe2}html.theme--catppuccin-frappe code .hljs-property{color:#81c8be}html.theme--catppuccin-frappe code .hljs-regexp{color:#f4b8e4}html.theme--catppuccin-frappe code .hljs-string{color:#a6d189}html.theme--catppuccin-frappe code .hljs-char.escape_{color:#a6d189}html.theme--catppuccin-frappe code .hljs-subst{color:#a5adce}html.theme--catppuccin-frappe code .hljs-symbol{color:#eebebe}html.theme--catppuccin-frappe code .hljs-variable{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-variable.language_{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-variable.constant_{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-title{color:#8caaee}html.theme--catppuccin-frappe code .hljs-title.class_{color:#e5c890}html.theme--catppuccin-frappe code .hljs-title.function_{color:#8caaee}html.theme--catppuccin-frappe code .hljs-params{color:#c6d0f5}html.theme--catppuccin-frappe code .hljs-comment{color:#626880}html.theme--catppuccin-frappe code .hljs-doctag{color:#e78284}html.theme--catppuccin-frappe code .hljs-meta{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-section{color:#8caaee}html.theme--catppuccin-frappe code .hljs-tag{color:#a5adce}html.theme--catppuccin-frappe code .hljs-name{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-attr{color:#8caaee}html.theme--catppuccin-frappe code .hljs-attribute{color:#a6d189}html.theme--catppuccin-frappe code .hljs-bullet{color:#81c8be}html.theme--catppuccin-frappe code .hljs-code{color:#a6d189}html.theme--catppuccin-frappe code .hljs-emphasis{color:#e78284;font-style:italic}html.theme--catppuccin-frappe code .hljs-strong{color:#e78284;font-weight:bold}html.theme--catppuccin-frappe code .hljs-formula{color:#81c8be}html.theme--catppuccin-frappe code .hljs-link{color:#85c1dc;font-style:italic}html.theme--catppuccin-frappe code .hljs-quote{color:#a6d189;font-style:italic}html.theme--catppuccin-frappe code .hljs-selector-tag{color:#e5c890}html.theme--catppuccin-frappe code .hljs-selector-id{color:#8caaee}html.theme--catppuccin-frappe code .hljs-selector-class{color:#81c8be}html.theme--catppuccin-frappe code .hljs-selector-attr{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-selector-pseudo{color:#81c8be}html.theme--catppuccin-frappe code .hljs-template-tag{color:#eebebe}html.theme--catppuccin-frappe code .hljs-template-variable{color:#eebebe}html.theme--catppuccin-frappe code .hljs-addition{color:#a6d189;background:rgba(166,227,161,0.15)}html.theme--catppuccin-frappe code .hljs-deletion{color:#e78284;background:rgba(243,139,168,0.15)}html.theme--catppuccin-frappe .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover,html.theme--catppuccin-frappe .search-result-link:focus{background-color:#414559}html.theme--catppuccin-frappe .search-result-link .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:hover .search-filter,html.theme--catppuccin-frappe .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:focus .search-filter{color:#414559 !important;background-color:#babbf1 !important}html.theme--catppuccin-frappe .search-result-title{color:#c6d0f5}html.theme--catppuccin-frappe .search-result-highlight{background-color:#e78284;color:#292c3c}html.theme--catppuccin-frappe .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-frappe .w-100{width:100%}html.theme--catppuccin-frappe .gap-2{gap:0.5rem}html.theme--catppuccin-frappe .gap-4{gap:1rem} diff --git a/previews/PR306/assets/themes/catppuccin-latte.css b/previews/PR306/assets/themes/catppuccin-latte.css new file mode 100644 index 00000000..ca172b63 --- /dev/null +++ b/previews/PR306/assets/themes/catppuccin-latte.css @@ -0,0 +1 @@ +html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-latte .pagination-previous:focus,html.theme--catppuccin-latte .pagination-next:focus,html.theme--catppuccin-latte .pagination-link:focus,html.theme--catppuccin-latte .pagination-ellipsis:focus,html.theme--catppuccin-latte .file-cta:focus,html.theme--catppuccin-latte .file-name:focus,html.theme--catppuccin-latte .select select:focus,html.theme--catppuccin-latte .textarea:focus,html.theme--catppuccin-latte .input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-latte .button:focus,html.theme--catppuccin-latte .is-focused.pagination-previous,html.theme--catppuccin-latte .is-focused.pagination-next,html.theme--catppuccin-latte .is-focused.pagination-link,html.theme--catppuccin-latte .is-focused.pagination-ellipsis,html.theme--catppuccin-latte .is-focused.file-cta,html.theme--catppuccin-latte .is-focused.file-name,html.theme--catppuccin-latte .select select.is-focused,html.theme--catppuccin-latte .is-focused.textarea,html.theme--catppuccin-latte .is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-focused.button,html.theme--catppuccin-latte .pagination-previous:active,html.theme--catppuccin-latte .pagination-next:active,html.theme--catppuccin-latte .pagination-link:active,html.theme--catppuccin-latte .pagination-ellipsis:active,html.theme--catppuccin-latte .file-cta:active,html.theme--catppuccin-latte .file-name:active,html.theme--catppuccin-latte .select select:active,html.theme--catppuccin-latte .textarea:active,html.theme--catppuccin-latte .input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-latte .button:active,html.theme--catppuccin-latte .is-active.pagination-previous,html.theme--catppuccin-latte .is-active.pagination-next,html.theme--catppuccin-latte .is-active.pagination-link,html.theme--catppuccin-latte .is-active.pagination-ellipsis,html.theme--catppuccin-latte .is-active.file-cta,html.theme--catppuccin-latte .is-active.file-name,html.theme--catppuccin-latte .select select.is-active,html.theme--catppuccin-latte .is-active.textarea,html.theme--catppuccin-latte .is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .is-active.button{outline:none}html.theme--catppuccin-latte .pagination-previous[disabled],html.theme--catppuccin-latte .pagination-next[disabled],html.theme--catppuccin-latte .pagination-link[disabled],html.theme--catppuccin-latte .pagination-ellipsis[disabled],html.theme--catppuccin-latte .file-cta[disabled],html.theme--catppuccin-latte .file-name[disabled],html.theme--catppuccin-latte .select select[disabled],html.theme--catppuccin-latte .textarea[disabled],html.theme--catppuccin-latte .input[disabled],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-latte .button[disabled],fieldset[disabled] html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-latte .select select,fieldset[disabled] html.theme--catppuccin-latte .textarea,fieldset[disabled] html.theme--catppuccin-latte .input,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte fieldset[disabled] .select select,html.theme--catppuccin-latte .select fieldset[disabled] select,html.theme--catppuccin-latte fieldset[disabled] .textarea,html.theme--catppuccin-latte fieldset[disabled] .input,html.theme--catppuccin-latte fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-latte .button,html.theme--catppuccin-latte fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-latte .tabs,html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .breadcrumb,html.theme--catppuccin-latte .file,html.theme--catppuccin-latte .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-latte .admonition:not(:last-child),html.theme--catppuccin-latte .tabs:not(:last-child),html.theme--catppuccin-latte .pagination:not(:last-child),html.theme--catppuccin-latte .message:not(:last-child),html.theme--catppuccin-latte .level:not(:last-child),html.theme--catppuccin-latte .breadcrumb:not(:last-child),html.theme--catppuccin-latte .block:not(:last-child),html.theme--catppuccin-latte .title:not(:last-child),html.theme--catppuccin-latte .subtitle:not(:last-child),html.theme--catppuccin-latte .table-container:not(:last-child),html.theme--catppuccin-latte .table:not(:last-child),html.theme--catppuccin-latte .progress:not(:last-child),html.theme--catppuccin-latte .notification:not(:last-child),html.theme--catppuccin-latte .content:not(:last-child),html.theme--catppuccin-latte .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .modal-close,html.theme--catppuccin-latte .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-latte .modal-close::before,html.theme--catppuccin-latte .delete::before,html.theme--catppuccin-latte .modal-close::after,html.theme--catppuccin-latte .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-latte .modal-close::before,html.theme--catppuccin-latte .delete::before{height:2px;width:50%}html.theme--catppuccin-latte .modal-close::after,html.theme--catppuccin-latte .delete::after{height:50%;width:2px}html.theme--catppuccin-latte .modal-close:hover,html.theme--catppuccin-latte .delete:hover,html.theme--catppuccin-latte .modal-close:focus,html.theme--catppuccin-latte .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-latte .modal-close:active,html.theme--catppuccin-latte .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-latte .is-small.modal-close,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-latte .is-small.delete,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-latte .is-medium.modal-close,html.theme--catppuccin-latte .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-latte .is-large.modal-close,html.theme--catppuccin-latte .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-latte .control.is-loading::after,html.theme--catppuccin-latte .select.is-loading::after,html.theme--catppuccin-latte .loader,html.theme--catppuccin-latte .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #8c8fa1;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-latte .hero-video,html.theme--catppuccin-latte .modal-background,html.theme--catppuccin-latte .modal,html.theme--catppuccin-latte .image.is-square img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-latte .image.is-square .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-latte .image.is-1by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-latte .image.is-1by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-latte .image.is-5by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-latte .image.is-5by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-latte .image.is-4by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-latte .image.is-4by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-latte .image.is-3by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-latte .image.is-5by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-latte .image.is-5by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-latte .image.is-16by9 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-latte .image.is-16by9 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-latte .image.is-2by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-latte .image.is-2by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-latte .image.is-3by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-latte .image.is-3by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-latte .image.is-4by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-latte .image.is-4by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-latte .image.is-3by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-latte .image.is-3by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-latte .image.is-2by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-latte .image.is-2by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-latte .image.is-3by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-latte .image.is-9by16 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-latte .image.is-9by16 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-latte .image.is-1by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-latte .image.is-1by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-latte .image.is-1by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-latte .image.is-1by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-latte .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#ccd0da !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#aeb5c5 !important}.has-background-dark{background-color:#ccd0da !important}.has-text-primary{color:#1e66f5 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#0a4ed6 !important}.has-background-primary{background-color:#1e66f5 !important}.has-text-primary-light{color:#ebf2fe !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bbd1fc !important}.has-background-primary-light{background-color:#ebf2fe !important}.has-text-primary-dark{color:#0a52e1 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#286df5 !important}.has-background-primary-dark{background-color:#0a52e1 !important}.has-text-link{color:#1e66f5 !important}a.has-text-link:hover,a.has-text-link:focus{color:#0a4ed6 !important}.has-background-link{background-color:#1e66f5 !important}.has-text-link-light{color:#ebf2fe !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bbd1fc !important}.has-background-link-light{background-color:#ebf2fe !important}.has-text-link-dark{color:#0a52e1 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#286df5 !important}.has-background-link-dark{background-color:#0a52e1 !important}.has-text-info{color:#179299 !important}a.has-text-info:hover,a.has-text-info:focus{color:#10686d !important}.has-background-info{background-color:#179299 !important}.has-text-info-light{color:#edfcfc !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c1f3f6 !important}.has-background-info-light{background-color:#edfcfc !important}.has-text-info-dark{color:#1cb2ba !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#2ad5df !important}.has-background-info-dark{background-color:#1cb2ba !important}.has-text-success{color:#40a02b !important}a.has-text-success:hover,a.has-text-success:focus{color:#307820 !important}.has-background-success{background-color:#40a02b !important}.has-text-success-light{color:#f1fbef !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#cef0c7 !important}.has-background-success-light{background-color:#f1fbef !important}.has-text-success-dark{color:#40a12b !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#50c936 !important}.has-background-success-dark{background-color:#40a12b !important}.has-text-warning{color:#df8e1d !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#b27117 !important}.has-background-warning{background-color:#df8e1d !important}.has-text-warning-light{color:#fdf6ed !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f7e0c0 !important}.has-background-warning-light{background-color:#fdf6ed !important}.has-text-warning-dark{color:#9e6515 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#cb811a !important}.has-background-warning-dark{background-color:#9e6515 !important}.has-text-danger{color:#d20f39 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a20c2c !important}.has-background-danger{background-color:#d20f39 !important}.has-text-danger-light{color:#feecf0 !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fabcca !important}.has-background-danger-light{background-color:#feecf0 !important}.has-text-danger-dark{color:#e9113f !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f13c63 !important}.has-background-danger-dark{background-color:#e9113f !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#ccd0da !important}.has-background-grey-darker{background-color:#ccd0da !important}.has-text-grey-dark{color:#bcc0cc !important}.has-background-grey-dark{background-color:#bcc0cc !important}.has-text-grey{color:#acb0be !important}.has-background-grey{background-color:#acb0be !important}.has-text-grey-light{color:#9ca0b0 !important}.has-background-grey-light{background-color:#9ca0b0 !important}.has-text-grey-lighter{color:#8c8fa1 !important}.has-background-grey-lighter{background-color:#8c8fa1 !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--catppuccin-latte html{background-color:#eff1f5;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-latte article,html.theme--catppuccin-latte aside,html.theme--catppuccin-latte figure,html.theme--catppuccin-latte footer,html.theme--catppuccin-latte header,html.theme--catppuccin-latte hgroup,html.theme--catppuccin-latte section{display:block}html.theme--catppuccin-latte body,html.theme--catppuccin-latte button,html.theme--catppuccin-latte input,html.theme--catppuccin-latte optgroup,html.theme--catppuccin-latte select,html.theme--catppuccin-latte textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-latte code,html.theme--catppuccin-latte pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-latte body{color:#4c4f69;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-latte a{color:#1e66f5;cursor:pointer;text-decoration:none}html.theme--catppuccin-latte a strong{color:currentColor}html.theme--catppuccin-latte a:hover{color:#04a5e5}html.theme--catppuccin-latte code{background-color:#e6e9ef;color:#4c4f69;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-latte hr{background-color:#e6e9ef;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-latte img{height:auto;max-width:100%}html.theme--catppuccin-latte input[type="checkbox"],html.theme--catppuccin-latte input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-latte small{font-size:.875em}html.theme--catppuccin-latte span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-latte strong{color:#41445a;font-weight:700}html.theme--catppuccin-latte fieldset{border:none}html.theme--catppuccin-latte pre{-webkit-overflow-scrolling:touch;background-color:#e6e9ef;color:#4c4f69;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-latte pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-latte table td,html.theme--catppuccin-latte table th{vertical-align:top}html.theme--catppuccin-latte table td:not([align]),html.theme--catppuccin-latte table th:not([align]){text-align:inherit}html.theme--catppuccin-latte table th{color:#41445a}html.theme--catppuccin-latte .box{background-color:#bcc0cc;border-radius:8px;box-shadow:none;color:#4c4f69;display:block;padding:1.25rem}html.theme--catppuccin-latte a.box:hover,html.theme--catppuccin-latte a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1e66f5}html.theme--catppuccin-latte a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1e66f5}html.theme--catppuccin-latte .button{background-color:#e6e9ef;border-color:#fff;border-width:1px;color:#1e66f5;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-latte .button strong{color:inherit}html.theme--catppuccin-latte .button .icon,html.theme--catppuccin-latte .button .icon.is-small,html.theme--catppuccin-latte .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-latte .button .icon.is-medium,html.theme--catppuccin-latte .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-latte .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-latte .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-latte .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-latte .button:hover,html.theme--catppuccin-latte .button.is-hovered{border-color:#9ca0b0;color:#41445a}html.theme--catppuccin-latte .button:focus,html.theme--catppuccin-latte .button.is-focused{border-color:#9ca0b0;color:#0b57ef}html.theme--catppuccin-latte .button:focus:not(:active),html.theme--catppuccin-latte .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button:active,html.theme--catppuccin-latte .button.is-active{border-color:#bcc0cc;color:#41445a}html.theme--catppuccin-latte .button.is-text{background-color:transparent;border-color:transparent;color:#4c4f69;text-decoration:underline}html.theme--catppuccin-latte .button.is-text:hover,html.theme--catppuccin-latte .button.is-text.is-hovered,html.theme--catppuccin-latte .button.is-text:focus,html.theme--catppuccin-latte .button.is-text.is-focused{background-color:#e6e9ef;color:#41445a}html.theme--catppuccin-latte .button.is-text:active,html.theme--catppuccin-latte .button.is-text.is-active{background-color:#d6dbe5;color:#41445a}html.theme--catppuccin-latte .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-latte .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1e66f5;text-decoration:none}html.theme--catppuccin-latte .button.is-ghost:hover,html.theme--catppuccin-latte .button.is-ghost.is-hovered{color:#1e66f5;text-decoration:underline}html.theme--catppuccin-latte .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:hover,html.theme--catppuccin-latte .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:focus,html.theme--catppuccin-latte .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:focus:not(:active),html.theme--catppuccin-latte .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .button.is-white:active,html.theme--catppuccin-latte .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-latte .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted:hover,html.theme--catppuccin-latte .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-latte .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-white.is-outlined:hover,html.theme--catppuccin-latte .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-white.is-outlined:focus,html.theme--catppuccin-latte .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:hover,html.theme--catppuccin-latte .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:focus,html.theme--catppuccin-latte .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:focus:not(:active),html.theme--catppuccin-latte .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .button.is-black:active,html.theme--catppuccin-latte .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-latte .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted:hover,html.theme--catppuccin-latte .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-outlined:hover,html.theme--catppuccin-latte .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-black.is-outlined:focus,html.theme--catppuccin-latte .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:hover,html.theme--catppuccin-latte .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:focus,html.theme--catppuccin-latte .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:focus:not(:active),html.theme--catppuccin-latte .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .button.is-light:active,html.theme--catppuccin-latte .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-latte .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted:hover,html.theme--catppuccin-latte .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-outlined:hover,html.theme--catppuccin-latte .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-light.is-outlined:focus,html.theme--catppuccin-latte .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark,html.theme--catppuccin-latte .content kbd.button{background-color:#ccd0da;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:hover,html.theme--catppuccin-latte .content kbd.button:hover,html.theme--catppuccin-latte .button.is-dark.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-hovered{background-color:#c5c9d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:focus,html.theme--catppuccin-latte .content kbd.button:focus,html.theme--catppuccin-latte .button.is-dark.is-focused,html.theme--catppuccin-latte .content kbd.button.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:focus:not(:active),html.theme--catppuccin-latte .content kbd.button:focus:not(:active),html.theme--catppuccin-latte .button.is-dark.is-focused:not(:active),html.theme--catppuccin-latte .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .button.is-dark:active,html.theme--catppuccin-latte .content kbd.button:active,html.theme--catppuccin-latte .button.is-dark.is-active,html.theme--catppuccin-latte .content kbd.button.is-active{background-color:#bdc2cf;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark[disabled],html.theme--catppuccin-latte .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button{background-color:#ccd0da;border-color:#ccd0da;box-shadow:none}html.theme--catppuccin-latte .button.is-dark.is-inverted,html.theme--catppuccin-latte .content kbd.button.is-inverted{background-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted:hover,html.theme--catppuccin-latte .content kbd.button.is-inverted:hover,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-inverted[disabled],html.theme--catppuccin-latte .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-loading::after,html.theme--catppuccin-latte .content kbd.button.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-dark.is-outlined,html.theme--catppuccin-latte .content kbd.button.is-outlined{background-color:transparent;border-color:#ccd0da;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-outlined:hover,html.theme--catppuccin-latte .content kbd.button.is-outlined:hover,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-dark.is-outlined:focus,html.theme--catppuccin-latte .content kbd.button.is-outlined:focus,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-focused{background-color:#ccd0da;border-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #ccd0da #ccd0da !important}html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-dark.is-outlined[disabled],html.theme--catppuccin-latte .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-outlined{background-color:transparent;border-color:#ccd0da;box-shadow:none;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ccd0da #ccd0da !important}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-primary,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:hover,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:focus,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:focus:not(:active),html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-latte .button.is-primary.is-focused:not(:active),html.theme--catppuccin-latte .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button.is-primary:active,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-latte .button.is-primary.is-active,html.theme--catppuccin-latte .docstring>section>a.button.is-active.docs-sourcelink{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary[disabled],html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink{background-color:#1e66f5;border-color:#1e66f5;box-shadow:none}html.theme--catppuccin-latte .button.is-primary.is-inverted,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-primary.is-inverted[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-loading::after,html.theme--catppuccin-latte .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-primary.is-outlined,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-outlined:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-latte .button.is-primary.is-outlined:focus,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-primary.is-outlined[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#1e66f5;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-light,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .button.is-primary.is-light:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-light.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#dfe9fe;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-primary.is-light:active,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-latte .button.is-primary.is-light.is-active,html.theme--catppuccin-latte .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d3e1fd;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-link{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:hover,html.theme--catppuccin-latte .button.is-link.is-hovered{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:focus,html.theme--catppuccin-latte .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:focus:not(:active),html.theme--catppuccin-latte .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button.is-link:active,html.theme--catppuccin-latte .button.is-link.is-active{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link{background-color:#1e66f5;border-color:#1e66f5;box-shadow:none}html.theme--catppuccin-latte .button.is-link.is-inverted{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted:hover,html.theme--catppuccin-latte .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-link.is-outlined{background-color:transparent;border-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-outlined:hover,html.theme--catppuccin-latte .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-link.is-outlined:focus,html.theme--catppuccin-latte .button.is-link.is-outlined.is-focused{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-outlined{background-color:transparent;border-color:#1e66f5;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-link.is-light{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .button.is-link.is-light:hover,html.theme--catppuccin-latte .button.is-link.is-light.is-hovered{background-color:#dfe9fe;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-link.is-light:active,html.theme--catppuccin-latte .button.is-link.is-light.is-active{background-color:#d3e1fd;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-info{background-color:#179299;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:hover,html.theme--catppuccin-latte .button.is-info.is-hovered{background-color:#15878e;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:focus,html.theme--catppuccin-latte .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:focus:not(:active),html.theme--catppuccin-latte .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .button.is-info:active,html.theme--catppuccin-latte .button.is-info.is-active{background-color:#147d83;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info{background-color:#179299;border-color:#179299;box-shadow:none}html.theme--catppuccin-latte .button.is-info.is-inverted{background-color:#fff;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted:hover,html.theme--catppuccin-latte .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#179299}html.theme--catppuccin-latte .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-info.is-outlined{background-color:transparent;border-color:#179299;color:#179299}html.theme--catppuccin-latte .button.is-info.is-outlined:hover,html.theme--catppuccin-latte .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-info.is-outlined:focus,html.theme--catppuccin-latte .button.is-info.is-outlined.is-focused{background-color:#179299;border-color:#179299;color:#fff}html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #179299 #179299 !important}html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-outlined{background-color:transparent;border-color:#179299;box-shadow:none;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #179299 #179299 !important}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-info.is-light{background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .button.is-info.is-light:hover,html.theme--catppuccin-latte .button.is-info.is-light.is-hovered{background-color:#e2f9fb;border-color:transparent;color:#1cb2ba}html.theme--catppuccin-latte .button.is-info.is-light:active,html.theme--catppuccin-latte .button.is-info.is-light.is-active{background-color:#d7f7f9;border-color:transparent;color:#1cb2ba}html.theme--catppuccin-latte .button.is-success{background-color:#40a02b;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:hover,html.theme--catppuccin-latte .button.is-success.is-hovered{background-color:#3c9628;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:focus,html.theme--catppuccin-latte .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:focus:not(:active),html.theme--catppuccin-latte .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .button.is-success:active,html.theme--catppuccin-latte .button.is-success.is-active{background-color:#388c26;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success{background-color:#40a02b;border-color:#40a02b;box-shadow:none}html.theme--catppuccin-latte .button.is-success.is-inverted{background-color:#fff;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted:hover,html.theme--catppuccin-latte .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-success.is-outlined{background-color:transparent;border-color:#40a02b;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-outlined:hover,html.theme--catppuccin-latte .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-success.is-outlined:focus,html.theme--catppuccin-latte .button.is-success.is-outlined.is-focused{background-color:#40a02b;border-color:#40a02b;color:#fff}html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #40a02b #40a02b !important}html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-outlined{background-color:transparent;border-color:#40a02b;box-shadow:none;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #40a02b #40a02b !important}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-success.is-light{background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .button.is-success.is-light:hover,html.theme--catppuccin-latte .button.is-success.is-light.is-hovered{background-color:#e8f8e5;border-color:transparent;color:#40a12b}html.theme--catppuccin-latte .button.is-success.is-light:active,html.theme--catppuccin-latte .button.is-success.is-light.is-active{background-color:#e0f5db;border-color:transparent;color:#40a12b}html.theme--catppuccin-latte .button.is-warning{background-color:#df8e1d;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:hover,html.theme--catppuccin-latte .button.is-warning.is-hovered{background-color:#d4871c;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:focus,html.theme--catppuccin-latte .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:focus:not(:active),html.theme--catppuccin-latte .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .button.is-warning:active,html.theme--catppuccin-latte .button.is-warning.is-active{background-color:#c8801a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning{background-color:#df8e1d;border-color:#df8e1d;box-shadow:none}html.theme--catppuccin-latte .button.is-warning.is-inverted{background-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted:hover,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-warning.is-outlined{background-color:transparent;border-color:#df8e1d;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-outlined:hover,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-warning.is-outlined:focus,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-focused{background-color:#df8e1d;border-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #df8e1d #df8e1d !important}html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-outlined{background-color:transparent;border-color:#df8e1d;box-shadow:none;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #df8e1d #df8e1d !important}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-light{background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .button.is-warning.is-light:hover,html.theme--catppuccin-latte .button.is-warning.is-light.is-hovered{background-color:#fbf1e2;border-color:transparent;color:#9e6515}html.theme--catppuccin-latte .button.is-warning.is-light:active,html.theme--catppuccin-latte .button.is-warning.is-light.is-active{background-color:#faebd6;border-color:transparent;color:#9e6515}html.theme--catppuccin-latte .button.is-danger{background-color:#d20f39;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:hover,html.theme--catppuccin-latte .button.is-danger.is-hovered{background-color:#c60e36;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:focus,html.theme--catppuccin-latte .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:focus:not(:active),html.theme--catppuccin-latte .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .button.is-danger:active,html.theme--catppuccin-latte .button.is-danger.is-active{background-color:#ba0d33;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger{background-color:#d20f39;border-color:#d20f39;box-shadow:none}html.theme--catppuccin-latte .button.is-danger.is-inverted{background-color:#fff;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted:hover,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-danger.is-outlined{background-color:transparent;border-color:#d20f39;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-outlined:hover,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-danger.is-outlined:focus,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-focused{background-color:#d20f39;border-color:#d20f39;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #d20f39 #d20f39 !important}html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-outlined{background-color:transparent;border-color:#d20f39;box-shadow:none;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #d20f39 #d20f39 !important}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-light{background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .button.is-danger.is-light:hover,html.theme--catppuccin-latte .button.is-danger.is-light.is-hovered{background-color:#fde0e6;border-color:transparent;color:#e9113f}html.theme--catppuccin-latte .button.is-danger.is-light:active,html.theme--catppuccin-latte .button.is-danger.is-light.is-active{background-color:#fcd4dd;border-color:transparent;color:#e9113f}html.theme--catppuccin-latte .button.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-latte .button.is-small:not(.is-rounded),html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-latte .button.is-normal{font-size:1rem}html.theme--catppuccin-latte .button.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .button.is-large{font-size:1.5rem}html.theme--catppuccin-latte .button[disabled],fieldset[disabled] html.theme--catppuccin-latte .button{background-color:#9ca0b0;border-color:#acb0be;box-shadow:none;opacity:.5}html.theme--catppuccin-latte .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-latte .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-latte .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-latte .button.is-static{background-color:#e6e9ef;border-color:#acb0be;color:#8c8fa1;box-shadow:none;pointer-events:none}html.theme--catppuccin-latte .button.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-latte .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-latte .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-latte .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-latte .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-latte .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-latte .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-latte .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-latte .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-latte .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-latte .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-latte .buttons.has-addons .button:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-latte .buttons.has-addons .button:focus,html.theme--catppuccin-latte .buttons.has-addons .button.is-focused,html.theme--catppuccin-latte .buttons.has-addons .button:active,html.theme--catppuccin-latte .buttons.has-addons .button.is-active,html.theme--catppuccin-latte .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-latte .buttons.has-addons .button:focus:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-latte .buttons.has-addons .button:active:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-latte .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .buttons.is-centered{justify-content:center}html.theme--catppuccin-latte .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-latte .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-latte .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .button.is-responsive.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-latte .button.is-responsive,html.theme--catppuccin-latte .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-latte .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-latte .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .button.is-responsive.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-latte .button.is-responsive,html.theme--catppuccin-latte .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-latte .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-latte .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-latte .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-latte .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-latte .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-latte .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-latte .content li+li{margin-top:0.25em}html.theme--catppuccin-latte .content p:not(:last-child),html.theme--catppuccin-latte .content dl:not(:last-child),html.theme--catppuccin-latte .content ol:not(:last-child),html.theme--catppuccin-latte .content ul:not(:last-child),html.theme--catppuccin-latte .content blockquote:not(:last-child),html.theme--catppuccin-latte .content pre:not(:last-child),html.theme--catppuccin-latte .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-latte .content h1,html.theme--catppuccin-latte .content h2,html.theme--catppuccin-latte .content h3,html.theme--catppuccin-latte .content h4,html.theme--catppuccin-latte .content h5,html.theme--catppuccin-latte .content h6{color:#4c4f69;font-weight:600;line-height:1.125}html.theme--catppuccin-latte .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-latte .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-latte .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-latte .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-latte .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-latte .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-latte .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-latte .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-latte .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-latte .content blockquote{background-color:#e6e9ef;border-left:5px solid #acb0be;padding:1.25em 1.5em}html.theme--catppuccin-latte .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-latte .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-latte .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-latte .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-latte .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-latte .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-latte .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-latte .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-latte .content ul ul ul{list-style-type:square}html.theme--catppuccin-latte .content dd{margin-left:2em}html.theme--catppuccin-latte .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-latte .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-latte .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-latte .content figure img{display:inline-block}html.theme--catppuccin-latte .content figure figcaption{font-style:italic}html.theme--catppuccin-latte .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-latte .content sup,html.theme--catppuccin-latte .content sub{font-size:75%}html.theme--catppuccin-latte .content table{width:100%}html.theme--catppuccin-latte .content table td,html.theme--catppuccin-latte .content table th{border:1px solid #acb0be;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-latte .content table th{color:#41445a}html.theme--catppuccin-latte .content table th:not([align]){text-align:inherit}html.theme--catppuccin-latte .content table thead td,html.theme--catppuccin-latte .content table thead th{border-width:0 0 2px;color:#41445a}html.theme--catppuccin-latte .content table tfoot td,html.theme--catppuccin-latte .content table tfoot th{border-width:2px 0 0;color:#41445a}html.theme--catppuccin-latte .content table tbody tr:last-child td,html.theme--catppuccin-latte .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-latte .content .tabs li+li{margin-top:0}html.theme--catppuccin-latte .content.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-latte .content.is-normal{font-size:1rem}html.theme--catppuccin-latte .content.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .content.is-large{font-size:1.5rem}html.theme--catppuccin-latte .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-latte .icon.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-latte .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-latte .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-latte .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-latte .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-latte .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-latte div.icon-text{display:flex}html.theme--catppuccin-latte .image,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-latte .image img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-latte .image img.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-latte .image.is-fullwidth,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-latte .image.is-square img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-latte .image.is-square .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-latte .image.is-1by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-latte .image.is-1by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-latte .image.is-5by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-latte .image.is-5by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-latte .image.is-4by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-latte .image.is-4by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-latte .image.is-3by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-latte .image.is-5by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-latte .image.is-5by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-latte .image.is-16by9 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-latte .image.is-16by9 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-latte .image.is-2by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-latte .image.is-2by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-latte .image.is-3by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-latte .image.is-3by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-latte .image.is-4by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-latte .image.is-4by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-latte .image.is-3by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-latte .image.is-3by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-latte .image.is-2by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-latte .image.is-2by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-latte .image.is-3by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-latte .image.is-9by16 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-latte .image.is-9by16 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-latte .image.is-1by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-latte .image.is-1by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-latte .image.is-1by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-latte .image.is-1by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-latte .image.is-square,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-latte .image.is-1by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-latte .image.is-5by4,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-latte .image.is-4by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-latte .image.is-3by2,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-latte .image.is-5by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-latte .image.is-16by9,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-latte .image.is-2by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-latte .image.is-3by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-latte .image.is-4by5,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-latte .image.is-3by4,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-latte .image.is-2by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-latte .image.is-3by5,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-latte .image.is-9by16,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-latte .image.is-1by2,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-latte .image.is-1by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-latte .image.is-16x16,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-latte .image.is-24x24,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-latte .image.is-32x32,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-latte .image.is-48x48,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-latte .image.is-64x64,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-latte .image.is-96x96,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-latte .image.is-128x128,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-latte .notification{background-color:#e6e9ef;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-latte .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-latte .notification strong{color:currentColor}html.theme--catppuccin-latte .notification code,html.theme--catppuccin-latte .notification pre{background:#fff}html.theme--catppuccin-latte .notification pre code{background:transparent}html.theme--catppuccin-latte .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-latte .notification .title,html.theme--catppuccin-latte .notification .subtitle,html.theme--catppuccin-latte .notification .content{color:currentColor}html.theme--catppuccin-latte .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .notification.is-dark,html.theme--catppuccin-latte .content kbd.notification{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .notification.is-primary,html.theme--catppuccin-latte .docstring>section>a.notification.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .notification.is-primary.is-light,html.theme--catppuccin-latte .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .notification.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .notification.is-link.is-light{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .notification.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .notification.is-info.is-light{background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .notification.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .notification.is-success.is-light{background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .notification.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .notification.is-warning.is-light{background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .notification.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .notification.is-danger.is-light{background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-latte .progress::-webkit-progress-bar{background-color:#bcc0cc}html.theme--catppuccin-latte .progress::-webkit-progress-value{background-color:#8c8fa1}html.theme--catppuccin-latte .progress::-moz-progress-bar{background-color:#8c8fa1}html.theme--catppuccin-latte .progress::-ms-fill{background-color:#8c8fa1;border:none}html.theme--catppuccin-latte .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-latte .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-latte .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-latte .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-latte .content kbd.progress::-webkit-progress-value{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-latte .content kbd.progress::-moz-progress-bar{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark::-ms-fill,html.theme--catppuccin-latte .content kbd.progress::-ms-fill{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark:indeterminate,html.theme--catppuccin-latte .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #ccd0da 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary::-ms-fill,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary:indeterminate,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #1e66f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-link::-webkit-progress-value{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link::-moz-progress-bar{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link::-ms-fill{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1e66f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-info::-webkit-progress-value{background-color:#179299}html.theme--catppuccin-latte .progress.is-info::-moz-progress-bar{background-color:#179299}html.theme--catppuccin-latte .progress.is-info::-ms-fill{background-color:#179299}html.theme--catppuccin-latte .progress.is-info:indeterminate{background-image:linear-gradient(to right, #179299 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-success::-webkit-progress-value{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success::-moz-progress-bar{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success::-ms-fill{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success:indeterminate{background-image:linear-gradient(to right, #40a02b 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-warning::-webkit-progress-value{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning::-moz-progress-bar{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning::-ms-fill{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #df8e1d 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-danger::-webkit-progress-value{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger::-moz-progress-bar{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger::-ms-fill{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #d20f39 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#bcc0cc;background-image:linear-gradient(to right, #4c4f69 30%, #bcc0cc 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-latte .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-latte .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-latte .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-latte .progress.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-latte .progress.is-medium{height:1.25rem}html.theme--catppuccin-latte .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-latte .table{background-color:#bcc0cc;color:#4c4f69}html.theme--catppuccin-latte .table td,html.theme--catppuccin-latte .table th{border:1px solid #acb0be;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-latte .table td.is-white,html.theme--catppuccin-latte .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .table td.is-black,html.theme--catppuccin-latte .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .table td.is-light,html.theme--catppuccin-latte .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .table td.is-dark,html.theme--catppuccin-latte .table th.is-dark{background-color:#ccd0da;border-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .table td.is-primary,html.theme--catppuccin-latte .table th.is-primary{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-link,html.theme--catppuccin-latte .table th.is-link{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-info,html.theme--catppuccin-latte .table th.is-info{background-color:#179299;border-color:#179299;color:#fff}html.theme--catppuccin-latte .table td.is-success,html.theme--catppuccin-latte .table th.is-success{background-color:#40a02b;border-color:#40a02b;color:#fff}html.theme--catppuccin-latte .table td.is-warning,html.theme--catppuccin-latte .table th.is-warning{background-color:#df8e1d;border-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .table td.is-danger,html.theme--catppuccin-latte .table th.is-danger{background-color:#d20f39;border-color:#d20f39;color:#fff}html.theme--catppuccin-latte .table td.is-narrow,html.theme--catppuccin-latte .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-latte .table td.is-selected,html.theme--catppuccin-latte .table th.is-selected{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-selected a,html.theme--catppuccin-latte .table td.is-selected strong,html.theme--catppuccin-latte .table th.is-selected a,html.theme--catppuccin-latte .table th.is-selected strong{color:currentColor}html.theme--catppuccin-latte .table td.is-vcentered,html.theme--catppuccin-latte .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-latte .table th{color:#41445a}html.theme--catppuccin-latte .table th:not([align]){text-align:left}html.theme--catppuccin-latte .table tr.is-selected{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table tr.is-selected a,html.theme--catppuccin-latte .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-latte .table tr.is-selected td,html.theme--catppuccin-latte .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-latte .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table thead td,html.theme--catppuccin-latte .table thead th{border-width:0 0 2px;color:#41445a}html.theme--catppuccin-latte .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table tfoot td,html.theme--catppuccin-latte .table tfoot th{border-width:2px 0 0;color:#41445a}html.theme--catppuccin-latte .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table tbody tr:last-child td,html.theme--catppuccin-latte .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-latte .table.is-bordered td,html.theme--catppuccin-latte .table.is-bordered th{border-width:1px}html.theme--catppuccin-latte .table.is-bordered tr:last-child td,html.theme--catppuccin-latte .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-latte .table.is-fullwidth{width:100%}html.theme--catppuccin-latte .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#ccd0da}html.theme--catppuccin-latte .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#ccd0da}html.theme--catppuccin-latte .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#d2d5de}html.theme--catppuccin-latte .table.is-narrow td,html.theme--catppuccin-latte .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-latte .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#ccd0da}html.theme--catppuccin-latte .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-latte .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .tags .tag,html.theme--catppuccin-latte .tags .content kbd,html.theme--catppuccin-latte .content .tags kbd,html.theme--catppuccin-latte .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-latte .tags .tag:not(:last-child),html.theme--catppuccin-latte .tags .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags kbd:not(:last-child),html.theme--catppuccin-latte .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-latte .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-latte .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-latte .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-latte .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-latte .tags.is-centered{justify-content:center}html.theme--catppuccin-latte .tags.is-centered .tag,html.theme--catppuccin-latte .tags.is-centered .content kbd,html.theme--catppuccin-latte .content .tags.is-centered kbd,html.theme--catppuccin-latte .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-latte .tags.is-right{justify-content:flex-end}html.theme--catppuccin-latte .tags.is-right .tag:not(:first-child),html.theme--catppuccin-latte .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-latte .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-latte .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-latte .tags.is-right .tag:not(:last-child),html.theme--catppuccin-latte .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-latte .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-latte .tags.has-addons .tag,html.theme--catppuccin-latte .tags.has-addons .content kbd,html.theme--catppuccin-latte .content .tags.has-addons kbd,html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-latte .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-latte .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-latte .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-latte .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-latte .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-latte .tag:not(body),html.theme--catppuccin-latte .content kbd:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#e6e9ef;border-radius:.4em;color:#4c4f69;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-latte .tag:not(body) .delete,html.theme--catppuccin-latte .content kbd:not(body) .delete,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-latte .tag.is-white:not(body),html.theme--catppuccin-latte .content kbd.is-white:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .tag.is-black:not(body),html.theme--catppuccin-latte .content kbd.is-black:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .tag.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .tag.is-dark:not(body),html.theme--catppuccin-latte .content kbd:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-latte .content .docstring>section>kbd:not(body){background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .tag.is-primary:not(body),html.theme--catppuccin-latte .content kbd.is-primary:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .tag.is-primary.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .tag.is-link:not(body),html.theme--catppuccin-latte .content kbd.is-link:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .tag.is-link.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-link.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .tag.is-info:not(body),html.theme--catppuccin-latte .content kbd.is-info:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#179299;color:#fff}html.theme--catppuccin-latte .tag.is-info.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-info.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .tag.is-success:not(body),html.theme--catppuccin-latte .content kbd.is-success:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .tag.is-success.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-success.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .tag.is-warning:not(body),html.theme--catppuccin-latte .content kbd.is-warning:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .tag.is-warning.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .tag.is-danger:not(body),html.theme--catppuccin-latte .content kbd.is-danger:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .tag.is-danger.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .tag.is-normal:not(body),html.theme--catppuccin-latte .content kbd.is-normal:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-latte .tag.is-medium:not(body),html.theme--catppuccin-latte .content kbd.is-medium:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-latte .tag.is-large:not(body),html.theme--catppuccin-latte .content kbd.is-large:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-latte .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-latte .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-latte .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-latte .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-latte .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-latte .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-latte .tag.is-delete:not(body),html.theme--catppuccin-latte .content kbd.is-delete:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-latte .tag.is-delete:not(body)::before,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::before,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-latte .tag.is-delete:not(body)::after,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::after,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-latte .tag.is-delete:not(body)::before,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::before,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-latte .tag.is-delete:not(body)::after,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::after,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-latte .tag.is-delete:not(body):hover,html.theme--catppuccin-latte .content kbd.is-delete:not(body):hover,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-latte .tag.is-delete:not(body):focus,html.theme--catppuccin-latte .content kbd.is-delete:not(body):focus,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#d6dbe5}html.theme--catppuccin-latte .tag.is-delete:not(body):active,html.theme--catppuccin-latte .content kbd.is-delete:not(body):active,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#c7cedb}html.theme--catppuccin-latte .tag.is-rounded:not(body),html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-latte .content kbd.is-rounded:not(body),html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-latte a.tag:hover,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-latte .title,html.theme--catppuccin-latte .subtitle{word-break:break-word}html.theme--catppuccin-latte .title em,html.theme--catppuccin-latte .title span,html.theme--catppuccin-latte .subtitle em,html.theme--catppuccin-latte .subtitle span{font-weight:inherit}html.theme--catppuccin-latte .title sub,html.theme--catppuccin-latte .subtitle sub{font-size:.75em}html.theme--catppuccin-latte .title sup,html.theme--catppuccin-latte .subtitle sup{font-size:.75em}html.theme--catppuccin-latte .title .tag,html.theme--catppuccin-latte .title .content kbd,html.theme--catppuccin-latte .content .title kbd,html.theme--catppuccin-latte .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-latte .subtitle .tag,html.theme--catppuccin-latte .subtitle .content kbd,html.theme--catppuccin-latte .content .subtitle kbd,html.theme--catppuccin-latte .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-latte .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-latte .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-latte .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-latte .title.is-1{font-size:3rem}html.theme--catppuccin-latte .title.is-2{font-size:2.5rem}html.theme--catppuccin-latte .title.is-3{font-size:2rem}html.theme--catppuccin-latte .title.is-4{font-size:1.5rem}html.theme--catppuccin-latte .title.is-5{font-size:1.25rem}html.theme--catppuccin-latte .title.is-6{font-size:1rem}html.theme--catppuccin-latte .title.is-7{font-size:.75rem}html.theme--catppuccin-latte .subtitle{color:#9ca0b0;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-latte .subtitle strong{color:#9ca0b0;font-weight:600}html.theme--catppuccin-latte .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-latte .subtitle.is-1{font-size:3rem}html.theme--catppuccin-latte .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-latte .subtitle.is-3{font-size:2rem}html.theme--catppuccin-latte .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-latte .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-latte .subtitle.is-6{font-size:1rem}html.theme--catppuccin-latte .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-latte .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-latte .number{align-items:center;background-color:#e6e9ef;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{background-color:#eff1f5;border-color:#acb0be;border-radius:.4em;color:#8c8fa1}html.theme--catppuccin-latte .select select::-moz-placeholder,html.theme--catppuccin-latte .textarea::-moz-placeholder,html.theme--catppuccin-latte .input::-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-latte .select select::-webkit-input-placeholder,html.theme--catppuccin-latte .textarea::-webkit-input-placeholder,html.theme--catppuccin-latte .input::-webkit-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:-moz-placeholder,html.theme--catppuccin-latte .textarea:-moz-placeholder,html.theme--catppuccin-latte .input:-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:-ms-input-placeholder,html.theme--catppuccin-latte .textarea:-ms-input-placeholder,html.theme--catppuccin-latte .input:-ms-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:hover,html.theme--catppuccin-latte .textarea:hover,html.theme--catppuccin-latte .input:hover,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-latte .select select.is-hovered,html.theme--catppuccin-latte .is-hovered.textarea,html.theme--catppuccin-latte .is-hovered.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#9ca0b0}html.theme--catppuccin-latte .select select:focus,html.theme--catppuccin-latte .textarea:focus,html.theme--catppuccin-latte .input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-latte .select select.is-focused,html.theme--catppuccin-latte .is-focused.textarea,html.theme--catppuccin-latte .is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .select select:active,html.theme--catppuccin-latte .textarea:active,html.theme--catppuccin-latte .input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-latte .select select.is-active,html.theme--catppuccin-latte .is-active.textarea,html.theme--catppuccin-latte .is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1e66f5;box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select select[disabled],html.theme--catppuccin-latte .textarea[disabled],html.theme--catppuccin-latte .input[disabled],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-latte .select select,fieldset[disabled] html.theme--catppuccin-latte .textarea,fieldset[disabled] html.theme--catppuccin-latte .input,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{background-color:#9ca0b0;border-color:#e6e9ef;box-shadow:none;color:#616587}html.theme--catppuccin-latte .select select[disabled]::-moz-placeholder,html.theme--catppuccin-latte .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-latte .input[disabled]::-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]:-moz-placeholder,html.theme--catppuccin-latte .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-latte .input[disabled]:-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-latte .textarea[readonly],html.theme--catppuccin-latte .input[readonly],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-latte .is-white.textarea,html.theme--catppuccin-latte .is-white.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-latte .is-white.textarea:focus,html.theme--catppuccin-latte .is-white.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-latte .is-white.is-focused.textarea,html.theme--catppuccin-latte .is-white.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-white.textarea:active,html.theme--catppuccin-latte .is-white.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-latte .is-white.is-active.textarea,html.theme--catppuccin-latte .is-white.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .is-black.textarea,html.theme--catppuccin-latte .is-black.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-latte .is-black.textarea:focus,html.theme--catppuccin-latte .is-black.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-latte .is-black.is-focused.textarea,html.theme--catppuccin-latte .is-black.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-black.textarea:active,html.theme--catppuccin-latte .is-black.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-latte .is-black.is-active.textarea,html.theme--catppuccin-latte .is-black.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .is-light.textarea,html.theme--catppuccin-latte .is-light.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-latte .is-light.textarea:focus,html.theme--catppuccin-latte .is-light.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-latte .is-light.is-focused.textarea,html.theme--catppuccin-latte .is-light.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-light.textarea:active,html.theme--catppuccin-latte .is-light.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-latte .is-light.is-active.textarea,html.theme--catppuccin-latte .is-light.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .is-dark.textarea,html.theme--catppuccin-latte .content kbd.textarea,html.theme--catppuccin-latte .is-dark.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-latte .content kbd.input{border-color:#ccd0da}html.theme--catppuccin-latte .is-dark.textarea:focus,html.theme--catppuccin-latte .content kbd.textarea:focus,html.theme--catppuccin-latte .is-dark.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-latte .content kbd.input:focus,html.theme--catppuccin-latte .is-dark.is-focused.textarea,html.theme--catppuccin-latte .content kbd.is-focused.textarea,html.theme--catppuccin-latte .is-dark.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .content kbd.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-dark.textarea:active,html.theme--catppuccin-latte .content kbd.textarea:active,html.theme--catppuccin-latte .is-dark.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-latte .content kbd.input:active,html.theme--catppuccin-latte .is-dark.is-active.textarea,html.theme--catppuccin-latte .content kbd.is-active.textarea,html.theme--catppuccin-latte .is-dark.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .content kbd.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .is-primary.textarea,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink{border-color:#1e66f5}html.theme--catppuccin-latte .is-primary.textarea:focus,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-latte .is-primary.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-latte .is-primary.is-focused.textarea,html.theme--catppuccin-latte .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-latte .is-primary.textarea:active,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-latte .is-primary.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-latte .is-primary.is-active.textarea,html.theme--catppuccin-latte .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .is-link.textarea,html.theme--catppuccin-latte .is-link.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1e66f5}html.theme--catppuccin-latte .is-link.textarea:focus,html.theme--catppuccin-latte .is-link.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-latte .is-link.is-focused.textarea,html.theme--catppuccin-latte .is-link.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-link.textarea:active,html.theme--catppuccin-latte .is-link.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-latte .is-link.is-active.textarea,html.theme--catppuccin-latte .is-link.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .is-info.textarea,html.theme--catppuccin-latte .is-info.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#179299}html.theme--catppuccin-latte .is-info.textarea:focus,html.theme--catppuccin-latte .is-info.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-latte .is-info.is-focused.textarea,html.theme--catppuccin-latte .is-info.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-info.textarea:active,html.theme--catppuccin-latte .is-info.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-latte .is-info.is-active.textarea,html.theme--catppuccin-latte .is-info.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .is-success.textarea,html.theme--catppuccin-latte .is-success.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#40a02b}html.theme--catppuccin-latte .is-success.textarea:focus,html.theme--catppuccin-latte .is-success.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-latte .is-success.is-focused.textarea,html.theme--catppuccin-latte .is-success.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-success.textarea:active,html.theme--catppuccin-latte .is-success.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-latte .is-success.is-active.textarea,html.theme--catppuccin-latte .is-success.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .is-warning.textarea,html.theme--catppuccin-latte .is-warning.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#df8e1d}html.theme--catppuccin-latte .is-warning.textarea:focus,html.theme--catppuccin-latte .is-warning.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-latte .is-warning.is-focused.textarea,html.theme--catppuccin-latte .is-warning.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-warning.textarea:active,html.theme--catppuccin-latte .is-warning.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-latte .is-warning.is-active.textarea,html.theme--catppuccin-latte .is-warning.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .is-danger.textarea,html.theme--catppuccin-latte .is-danger.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#d20f39}html.theme--catppuccin-latte .is-danger.textarea:focus,html.theme--catppuccin-latte .is-danger.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-latte .is-danger.is-focused.textarea,html.theme--catppuccin-latte .is-danger.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-danger.textarea:active,html.theme--catppuccin-latte .is-danger.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-latte .is-danger.is-active.textarea,html.theme--catppuccin-latte .is-danger.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .is-small.textarea,html.theme--catppuccin-latte .is-small.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-latte .is-medium.textarea,html.theme--catppuccin-latte .is-medium.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .is-large.textarea,html.theme--catppuccin-latte .is-large.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-latte .is-fullwidth.textarea,html.theme--catppuccin-latte .is-fullwidth.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-latte .is-inline.textarea,html.theme--catppuccin-latte .is-inline.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-latte .input.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-latte .input.is-static,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-latte .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-latte .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-latte .textarea[rows]{height:initial}html.theme--catppuccin-latte .textarea.has-fixed-size{resize:none}html.theme--catppuccin-latte .radio,html.theme--catppuccin-latte .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-latte .radio input,html.theme--catppuccin-latte .checkbox input{cursor:pointer}html.theme--catppuccin-latte .radio:hover,html.theme--catppuccin-latte .checkbox:hover{color:#04a5e5}html.theme--catppuccin-latte .radio[disabled],html.theme--catppuccin-latte .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-latte .radio,fieldset[disabled] html.theme--catppuccin-latte .checkbox,html.theme--catppuccin-latte .radio input[disabled],html.theme--catppuccin-latte .checkbox input[disabled]{color:#616587;cursor:not-allowed}html.theme--catppuccin-latte .radio+.radio{margin-left:.5em}html.theme--catppuccin-latte .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-latte .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading)::after{border-color:#1e66f5;right:1.125em;z-index:4}html.theme--catppuccin-latte .select.is-rounded select,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-latte .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-latte .select select::-ms-expand{display:none}html.theme--catppuccin-latte .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-latte .select select:hover{border-color:#e6e9ef}html.theme--catppuccin-latte .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-latte .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-latte .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#04a5e5}html.theme--catppuccin-latte .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-latte .select.is-white select{border-color:#fff}html.theme--catppuccin-latte .select.is-white select:hover,html.theme--catppuccin-latte .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-latte .select.is-white select:focus,html.theme--catppuccin-latte .select.is-white select.is-focused,html.theme--catppuccin-latte .select.is-white select:active,html.theme--catppuccin-latte .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-latte .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-latte .select.is-black select:hover,html.theme--catppuccin-latte .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-latte .select.is-black select:focus,html.theme--catppuccin-latte .select.is-black select.is-focused,html.theme--catppuccin-latte .select.is-black select:active,html.theme--catppuccin-latte .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-latte .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-latte .select.is-light select:hover,html.theme--catppuccin-latte .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-latte .select.is-light select:focus,html.theme--catppuccin-latte .select.is-light select.is-focused,html.theme--catppuccin-latte .select.is-light select:active,html.theme--catppuccin-latte .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .select.is-dark:not(:hover)::after,html.theme--catppuccin-latte .content kbd.select:not(:hover)::after{border-color:#ccd0da}html.theme--catppuccin-latte .select.is-dark select,html.theme--catppuccin-latte .content kbd.select select{border-color:#ccd0da}html.theme--catppuccin-latte .select.is-dark select:hover,html.theme--catppuccin-latte .content kbd.select select:hover,html.theme--catppuccin-latte .select.is-dark select.is-hovered,html.theme--catppuccin-latte .content kbd.select select.is-hovered{border-color:#bdc2cf}html.theme--catppuccin-latte .select.is-dark select:focus,html.theme--catppuccin-latte .content kbd.select select:focus,html.theme--catppuccin-latte .select.is-dark select.is-focused,html.theme--catppuccin-latte .content kbd.select select.is-focused,html.theme--catppuccin-latte .select.is-dark select:active,html.theme--catppuccin-latte .content kbd.select select:active,html.theme--catppuccin-latte .select.is-dark select.is-active,html.theme--catppuccin-latte .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .select.is-primary:not(:hover)::after,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-primary select,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-primary select:hover,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-latte .select.is-primary select.is-hovered,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#0b57ef}html.theme--catppuccin-latte .select.is-primary select:focus,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-latte .select.is-primary select.is-focused,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-latte .select.is-primary select:active,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-latte .select.is-primary select.is-active,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select.is-link:not(:hover)::after{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-link select{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-link select:hover,html.theme--catppuccin-latte .select.is-link select.is-hovered{border-color:#0b57ef}html.theme--catppuccin-latte .select.is-link select:focus,html.theme--catppuccin-latte .select.is-link select.is-focused,html.theme--catppuccin-latte .select.is-link select:active,html.theme--catppuccin-latte .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select.is-info:not(:hover)::after{border-color:#179299}html.theme--catppuccin-latte .select.is-info select{border-color:#179299}html.theme--catppuccin-latte .select.is-info select:hover,html.theme--catppuccin-latte .select.is-info select.is-hovered{border-color:#147d83}html.theme--catppuccin-latte .select.is-info select:focus,html.theme--catppuccin-latte .select.is-info select.is-focused,html.theme--catppuccin-latte .select.is-info select:active,html.theme--catppuccin-latte .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .select.is-success:not(:hover)::after{border-color:#40a02b}html.theme--catppuccin-latte .select.is-success select{border-color:#40a02b}html.theme--catppuccin-latte .select.is-success select:hover,html.theme--catppuccin-latte .select.is-success select.is-hovered{border-color:#388c26}html.theme--catppuccin-latte .select.is-success select:focus,html.theme--catppuccin-latte .select.is-success select.is-focused,html.theme--catppuccin-latte .select.is-success select:active,html.theme--catppuccin-latte .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .select.is-warning:not(:hover)::after{border-color:#df8e1d}html.theme--catppuccin-latte .select.is-warning select{border-color:#df8e1d}html.theme--catppuccin-latte .select.is-warning select:hover,html.theme--catppuccin-latte .select.is-warning select.is-hovered{border-color:#c8801a}html.theme--catppuccin-latte .select.is-warning select:focus,html.theme--catppuccin-latte .select.is-warning select.is-focused,html.theme--catppuccin-latte .select.is-warning select:active,html.theme--catppuccin-latte .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .select.is-danger:not(:hover)::after{border-color:#d20f39}html.theme--catppuccin-latte .select.is-danger select{border-color:#d20f39}html.theme--catppuccin-latte .select.is-danger select:hover,html.theme--catppuccin-latte .select.is-danger select.is-hovered{border-color:#ba0d33}html.theme--catppuccin-latte .select.is-danger select:focus,html.theme--catppuccin-latte .select.is-danger select.is-focused,html.theme--catppuccin-latte .select.is-danger select:active,html.theme--catppuccin-latte .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .select.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-latte .select.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .select.is-large{font-size:1.5rem}html.theme--catppuccin-latte .select.is-disabled::after{border-color:#616587 !important;opacity:0.5}html.theme--catppuccin-latte .select.is-fullwidth{width:100%}html.theme--catppuccin-latte .select.is-fullwidth select{width:100%}html.theme--catppuccin-latte .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-latte .select.is-loading.is-small:after,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-latte .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-latte .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-latte .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-latte .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:hover .file-cta,html.theme--catppuccin-latte .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:focus .file-cta,html.theme--catppuccin-latte .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:active .file-cta,html.theme--catppuccin-latte .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-black:hover .file-cta,html.theme--catppuccin-latte .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-black:focus .file-cta,html.theme--catppuccin-latte .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-latte .file.is-black:active .file-cta,html.theme--catppuccin-latte .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:hover .file-cta,html.theme--catppuccin-latte .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:focus .file-cta,html.theme--catppuccin-latte .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:active .file-cta,html.theme--catppuccin-latte .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark .file-cta,html.theme--catppuccin-latte .content kbd.file .file-cta{background-color:#ccd0da;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:hover .file-cta,html.theme--catppuccin-latte .content kbd.file:hover .file-cta,html.theme--catppuccin-latte .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-latte .content kbd.file.is-hovered .file-cta{background-color:#c5c9d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:focus .file-cta,html.theme--catppuccin-latte .content kbd.file:focus .file-cta,html.theme--catppuccin-latte .file.is-dark.is-focused .file-cta,html.theme--catppuccin-latte .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(204,208,218,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:active .file-cta,html.theme--catppuccin-latte .content kbd.file:active .file-cta,html.theme--catppuccin-latte .file.is-dark.is-active .file-cta,html.theme--catppuccin-latte .content kbd.file.is-active .file-cta{background-color:#bdc2cf;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-primary .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-primary:hover .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-latte .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-primary:focus .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-latte .file.is-primary.is-focused .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(30,102,245,0.25);color:#fff}html.theme--catppuccin-latte .file.is-primary:active .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-latte .file.is-primary.is-active .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link .file-cta{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link:hover .file-cta,html.theme--catppuccin-latte .file.is-link.is-hovered .file-cta{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link:focus .file-cta,html.theme--catppuccin-latte .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(30,102,245,0.25);color:#fff}html.theme--catppuccin-latte .file.is-link:active .file-cta,html.theme--catppuccin-latte .file.is-link.is-active .file-cta{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info .file-cta{background-color:#179299;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info:hover .file-cta,html.theme--catppuccin-latte .file.is-info.is-hovered .file-cta{background-color:#15878e;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info:focus .file-cta,html.theme--catppuccin-latte .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(23,146,153,0.25);color:#fff}html.theme--catppuccin-latte .file.is-info:active .file-cta,html.theme--catppuccin-latte .file.is-info.is-active .file-cta{background-color:#147d83;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success .file-cta{background-color:#40a02b;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success:hover .file-cta,html.theme--catppuccin-latte .file.is-success.is-hovered .file-cta{background-color:#3c9628;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success:focus .file-cta,html.theme--catppuccin-latte .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(64,160,43,0.25);color:#fff}html.theme--catppuccin-latte .file.is-success:active .file-cta,html.theme--catppuccin-latte .file.is-success.is-active .file-cta{background-color:#388c26;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning .file-cta{background-color:#df8e1d;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning:hover .file-cta,html.theme--catppuccin-latte .file.is-warning.is-hovered .file-cta{background-color:#d4871c;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning:focus .file-cta,html.theme--catppuccin-latte .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(223,142,29,0.25);color:#fff}html.theme--catppuccin-latte .file.is-warning:active .file-cta,html.theme--catppuccin-latte .file.is-warning.is-active .file-cta{background-color:#c8801a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger .file-cta{background-color:#d20f39;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger:hover .file-cta,html.theme--catppuccin-latte .file.is-danger.is-hovered .file-cta{background-color:#c60e36;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger:focus .file-cta,html.theme--catppuccin-latte .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(210,15,57,0.25);color:#fff}html.theme--catppuccin-latte .file.is-danger:active .file-cta,html.theme--catppuccin-latte .file.is-danger.is-active .file-cta{background-color:#ba0d33;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-latte .file.is-normal{font-size:1rem}html.theme--catppuccin-latte .file.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-latte .file.is-large{font-size:1.5rem}html.theme--catppuccin-latte .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-latte .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-latte .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-latte .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-latte .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-latte .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-latte .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-latte .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-latte .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-latte .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-latte .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-latte .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-latte .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-latte .file.is-centered{justify-content:center}html.theme--catppuccin-latte .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-latte .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-latte .file.is-right{justify-content:flex-end}html.theme--catppuccin-latte .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-latte .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-latte .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-latte .file-label:hover .file-cta{background-color:#c5c9d5;color:#41445a}html.theme--catppuccin-latte .file-label:hover .file-name{border-color:#a5a9b8}html.theme--catppuccin-latte .file-label:active .file-cta{background-color:#bdc2cf;color:#41445a}html.theme--catppuccin-latte .file-label:active .file-name{border-color:#9ea2b3}html.theme--catppuccin-latte .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte .file-name{border-color:#acb0be;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-latte .file-cta{background-color:#ccd0da;color:#4c4f69}html.theme--catppuccin-latte .file-name{border-color:#acb0be;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-latte .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-latte .file-icon .fa{font-size:14px}html.theme--catppuccin-latte .label{color:#41445a;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-latte .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-latte .label.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-latte .label.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .label.is-large{font-size:1.5rem}html.theme--catppuccin-latte .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-latte .help.is-white{color:#fff}html.theme--catppuccin-latte .help.is-black{color:#0a0a0a}html.theme--catppuccin-latte .help.is-light{color:#f5f5f5}html.theme--catppuccin-latte .help.is-dark,html.theme--catppuccin-latte .content kbd.help{color:#ccd0da}html.theme--catppuccin-latte .help.is-primary,html.theme--catppuccin-latte .docstring>section>a.help.docs-sourcelink{color:#1e66f5}html.theme--catppuccin-latte .help.is-link{color:#1e66f5}html.theme--catppuccin-latte .help.is-info{color:#179299}html.theme--catppuccin-latte .help.is-success{color:#40a02b}html.theme--catppuccin-latte .help.is-warning{color:#df8e1d}html.theme--catppuccin-latte .help.is-danger{color:#d20f39}html.theme--catppuccin-latte .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-latte .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-latte .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-latte .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-latte .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-latte .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-latte .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-latte .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-latte .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-latte .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field.is-horizontal{display:flex}}html.theme--catppuccin-latte .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-latte .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-latte .field-label.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-latte .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-latte .field-body .field{margin-bottom:0}html.theme--catppuccin-latte .field-body>.field{flex-shrink:1}html.theme--catppuccin-latte .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-latte .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-latte .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-latte .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right .select:focus~.icon{color:#ccd0da}html.theme--catppuccin-latte .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-latte .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-latte .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-latte .control.has-icons-left .icon,html.theme--catppuccin-latte .control.has-icons-right .icon{color:#acb0be;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-latte .control.has-icons-left .input,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-latte .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-latte .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-latte .control.has-icons-right .input,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-latte .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-latte .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-latte .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-latte .control.is-loading.is-small:after,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-latte .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-latte .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-latte .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-latte .breadcrumb a{align-items:center;color:#1e66f5;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-latte .breadcrumb a:hover{color:#04a5e5}html.theme--catppuccin-latte .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-latte .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-latte .breadcrumb li.is-active a{color:#41445a;cursor:default;pointer-events:none}html.theme--catppuccin-latte .breadcrumb li+li::before{color:#9ca0b0;content:"\0002f"}html.theme--catppuccin-latte .breadcrumb ul,html.theme--catppuccin-latte .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-latte .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-latte .breadcrumb.is-centered ol,html.theme--catppuccin-latte .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-latte .breadcrumb.is-right ol,html.theme--catppuccin-latte .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-latte .breadcrumb.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-latte .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-latte .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-latte .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-latte .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-latte .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-latte .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#4c4f69;max-width:100%;position:relative}html.theme--catppuccin-latte .card-footer:first-child,html.theme--catppuccin-latte .card-content:first-child,html.theme--catppuccin-latte .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-latte .card-footer:last-child,html.theme--catppuccin-latte .card-content:last-child,html.theme--catppuccin-latte .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-latte .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-latte .card-header-title{align-items:center;color:#41445a;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-latte .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-latte .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-latte .card-image{display:block;position:relative}html.theme--catppuccin-latte .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-latte .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-latte .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-latte .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-latte .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-latte .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-latte .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-latte .dropdown.is-active .dropdown-menu,html.theme--catppuccin-latte .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-latte .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-latte .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-latte .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-latte .dropdown-content{background-color:#e6e9ef;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-latte .dropdown-item{color:#4c4f69;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-latte a.dropdown-item,html.theme--catppuccin-latte button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-latte a.dropdown-item:hover,html.theme--catppuccin-latte button.dropdown-item:hover{background-color:#e6e9ef;color:#0a0a0a}html.theme--catppuccin-latte a.dropdown-item.is-active,html.theme--catppuccin-latte button.dropdown-item.is-active{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-latte .level{align-items:center;justify-content:space-between}html.theme--catppuccin-latte .level code{border-radius:.4em}html.theme--catppuccin-latte .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-latte .level.is-mobile{display:flex}html.theme--catppuccin-latte .level.is-mobile .level-left,html.theme--catppuccin-latte .level.is-mobile .level-right{display:flex}html.theme--catppuccin-latte .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-latte .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-latte .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level{display:flex}html.theme--catppuccin-latte .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-latte .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-latte .level-item .title,html.theme--catppuccin-latte .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-latte .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-latte .level-left,html.theme--catppuccin-latte .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .level-left .level-item.is-flexible,html.theme--catppuccin-latte .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-left .level-item:not(:last-child),html.theme--catppuccin-latte .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-latte .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-latte .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-left{display:flex}}html.theme--catppuccin-latte .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-right{display:flex}}html.theme--catppuccin-latte .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-latte .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-latte .media .media{border-top:1px solid rgba(172,176,190,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-latte .media .media .content:not(:last-child),html.theme--catppuccin-latte .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-latte .media .media .media{padding-top:.5rem}html.theme--catppuccin-latte .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-latte .media+.media{border-top:1px solid rgba(172,176,190,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-latte .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-latte .media-left,html.theme--catppuccin-latte .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .media-left{margin-right:1rem}html.theme--catppuccin-latte .media-right{margin-left:1rem}html.theme--catppuccin-latte .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-latte .media-content{overflow-x:auto}}html.theme--catppuccin-latte .menu{font-size:1rem}html.theme--catppuccin-latte .menu.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-latte .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .menu.is-large{font-size:1.5rem}html.theme--catppuccin-latte .menu-list{line-height:1.25}html.theme--catppuccin-latte .menu-list a{border-radius:3px;color:#4c4f69;display:block;padding:0.5em 0.75em}html.theme--catppuccin-latte .menu-list a:hover{background-color:#e6e9ef;color:#41445a}html.theme--catppuccin-latte .menu-list a.is-active{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .menu-list li ul{border-left:1px solid #acb0be;margin:.75em;padding-left:.75em}html.theme--catppuccin-latte .menu-label{color:#616587;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-latte .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-latte .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-latte .message{background-color:#e6e9ef;border-radius:.4em;font-size:1rem}html.theme--catppuccin-latte .message strong{color:currentColor}html.theme--catppuccin-latte .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-latte .message.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-latte .message.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .message.is-large{font-size:1.5rem}html.theme--catppuccin-latte .message.is-white{background-color:#fff}html.theme--catppuccin-latte .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-latte .message.is-black{background-color:#fafafa}html.theme--catppuccin-latte .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-latte .message.is-light{background-color:#fafafa}html.theme--catppuccin-latte .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-latte .message.is-dark,html.theme--catppuccin-latte .content kbd.message{background-color:#f9fafb}html.theme--catppuccin-latte .message.is-dark .message-header,html.theme--catppuccin-latte .content kbd.message .message-header{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .message.is-dark .message-body,html.theme--catppuccin-latte .content kbd.message .message-body{border-color:#ccd0da}html.theme--catppuccin-latte .message.is-primary,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink{background-color:#ebf2fe}html.theme--catppuccin-latte .message.is-primary .message-header,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink .message-header{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .message.is-primary .message-body,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink .message-body{border-color:#1e66f5;color:#0a52e1}html.theme--catppuccin-latte .message.is-link{background-color:#ebf2fe}html.theme--catppuccin-latte .message.is-link .message-header{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .message.is-link .message-body{border-color:#1e66f5;color:#0a52e1}html.theme--catppuccin-latte .message.is-info{background-color:#edfcfc}html.theme--catppuccin-latte .message.is-info .message-header{background-color:#179299;color:#fff}html.theme--catppuccin-latte .message.is-info .message-body{border-color:#179299;color:#1cb2ba}html.theme--catppuccin-latte .message.is-success{background-color:#f1fbef}html.theme--catppuccin-latte .message.is-success .message-header{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .message.is-success .message-body{border-color:#40a02b;color:#40a12b}html.theme--catppuccin-latte .message.is-warning{background-color:#fdf6ed}html.theme--catppuccin-latte .message.is-warning .message-header{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .message.is-warning .message-body{border-color:#df8e1d;color:#9e6515}html.theme--catppuccin-latte .message.is-danger{background-color:#feecf0}html.theme--catppuccin-latte .message.is-danger .message-header{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .message.is-danger .message-body{border-color:#d20f39;color:#e9113f}html.theme--catppuccin-latte .message-header{align-items:center;background-color:#4c4f69;border-radius:.4em .4em 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-latte .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-latte .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .message-body{border-color:#acb0be;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#4c4f69;padding:1.25em 1.5em}html.theme--catppuccin-latte .message-body code,html.theme--catppuccin-latte .message-body pre{background-color:#fff}html.theme--catppuccin-latte .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-latte .modal.is-active{display:flex}html.theme--catppuccin-latte .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-latte .modal-content,html.theme--catppuccin-latte .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-latte .modal-content,html.theme--catppuccin-latte .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-latte .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-latte .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-latte .modal-card-head,html.theme--catppuccin-latte .modal-card-foot{align-items:center;background-color:#e6e9ef;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-latte .modal-card-head{border-bottom:1px solid #acb0be;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-latte .modal-card-title{color:#4c4f69;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-latte .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #acb0be}html.theme--catppuccin-latte .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-latte .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#eff1f5;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-latte .navbar{background-color:#1e66f5;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-latte .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-latte .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-latte .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-latte .navbar.is-dark,html.theme--catppuccin-latte .content kbd.navbar{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-burger,html.theme--catppuccin-latte .content kbd.navbar .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#ccd0da;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-latte .navbar.is-primary,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-burger,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5;color:#fff}}html.theme--catppuccin-latte .navbar.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5;color:#fff}}html.theme--catppuccin-latte .navbar.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#179299;color:#fff}}html.theme--catppuccin-latte .navbar.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#40a02b;color:#fff}}html.theme--catppuccin-latte .navbar.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#df8e1d;color:#fff}}html.theme--catppuccin-latte .navbar.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#d20f39;color:#fff}}html.theme--catppuccin-latte .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-latte .navbar.has-shadow{box-shadow:0 2px 0 0 #e6e9ef}html.theme--catppuccin-latte .navbar.is-fixed-bottom,html.theme--catppuccin-latte .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #e6e9ef}html.theme--catppuccin-latte .navbar.is-fixed-top{top:0}html.theme--catppuccin-latte html.has-navbar-fixed-top,html.theme--catppuccin-latte body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom,html.theme--catppuccin-latte body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-latte .navbar-brand,html.theme--catppuccin-latte .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-latte .navbar-brand a.navbar-item:focus,html.theme--catppuccin-latte .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-latte .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-latte .navbar-burger{color:#4c4f69;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-latte .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--catppuccin-latte .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-latte .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-latte .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-latte .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-latte .navbar-menu{display:none}html.theme--catppuccin-latte .navbar-item,html.theme--catppuccin-latte .navbar-link{color:#4c4f69;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-latte .navbar-item .icon:only-child,html.theme--catppuccin-latte .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-latte a.navbar-item,html.theme--catppuccin-latte .navbar-link{cursor:pointer}html.theme--catppuccin-latte a.navbar-item:focus,html.theme--catppuccin-latte a.navbar-item:focus-within,html.theme--catppuccin-latte a.navbar-item:hover,html.theme--catppuccin-latte a.navbar-item.is-active,html.theme--catppuccin-latte .navbar-link:focus,html.theme--catppuccin-latte .navbar-link:focus-within,html.theme--catppuccin-latte .navbar-link:hover,html.theme--catppuccin-latte .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}html.theme--catppuccin-latte .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .navbar-item img{max-height:1.75rem}html.theme--catppuccin-latte .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-latte .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-latte .navbar-item.is-tab:focus,html.theme--catppuccin-latte .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1e66f5}html.theme--catppuccin-latte .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1e66f5;border-bottom-style:solid;border-bottom-width:3px;color:#1e66f5;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-latte .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-latte .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-latte .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-latte .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .navbar>.container{display:block}html.theme--catppuccin-latte .navbar-brand .navbar-item,html.theme--catppuccin-latte .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-latte .navbar-link::after{display:none}html.theme--catppuccin-latte .navbar-menu{background-color:#1e66f5;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-latte .navbar-menu.is-active{display:block}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch,html.theme--catppuccin-latte .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-latte .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-latte .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-latte .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-latte html.has-navbar-fixed-top-touch,html.theme--catppuccin-latte body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-latte body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar,html.theme--catppuccin-latte .navbar-menu,html.theme--catppuccin-latte .navbar-start,html.theme--catppuccin-latte .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-latte .navbar{min-height:4rem}html.theme--catppuccin-latte .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-latte .navbar.is-spaced .navbar-start,html.theme--catppuccin-latte .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-latte .navbar.is-spaced a.navbar-item,html.theme--catppuccin-latte .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8c8fa1}html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}html.theme--catppuccin-latte .navbar-burger{display:none}html.theme--catppuccin-latte .navbar-item,html.theme--catppuccin-latte .navbar-link{align-items:center;display:flex}html.theme--catppuccin-latte .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-latte .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-latte .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-latte .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-latte .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-latte .navbar-dropdown{background-color:#1e66f5;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-latte .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-latte .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8c8fa1}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}.navbar.is-spaced html.theme--catppuccin-latte .navbar-dropdown,html.theme--catppuccin-latte .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-latte .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-latte .navbar-divider{display:block}html.theme--catppuccin-latte .navbar>.container .navbar-brand,html.theme--catppuccin-latte .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-latte .navbar>.container .navbar-menu,html.theme--catppuccin-latte .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-latte .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-latte .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-latte html.has-navbar-fixed-top-desktop,html.theme--catppuccin-latte body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-latte body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-latte html.has-spaced-navbar-fixed-top,html.theme--catppuccin-latte body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-latte html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-latte body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-latte a.navbar-item.is-active,html.theme--catppuccin-latte .navbar-link.is-active{color:#1e66f5}html.theme--catppuccin-latte a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-latte .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-latte .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-latte .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-latte .pagination.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-latte .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-latte .pagination.is-rounded .pagination-previous,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-latte .pagination.is-rounded .pagination-next,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-latte .pagination.is-rounded .pagination-link,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-latte .pagination,html.theme--catppuccin-latte .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link{border-color:#acb0be;color:#1e66f5;min-width:2.5em}html.theme--catppuccin-latte .pagination-previous:hover,html.theme--catppuccin-latte .pagination-next:hover,html.theme--catppuccin-latte .pagination-link:hover{border-color:#9ca0b0;color:#04a5e5}html.theme--catppuccin-latte .pagination-previous:focus,html.theme--catppuccin-latte .pagination-next:focus,html.theme--catppuccin-latte .pagination-link:focus{border-color:#9ca0b0}html.theme--catppuccin-latte .pagination-previous:active,html.theme--catppuccin-latte .pagination-next:active,html.theme--catppuccin-latte .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-latte .pagination-previous[disabled],html.theme--catppuccin-latte .pagination-previous.is-disabled,html.theme--catppuccin-latte .pagination-next[disabled],html.theme--catppuccin-latte .pagination-next.is-disabled,html.theme--catppuccin-latte .pagination-link[disabled],html.theme--catppuccin-latte .pagination-link.is-disabled{background-color:#acb0be;border-color:#acb0be;box-shadow:none;color:#616587;opacity:0.5}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-latte .pagination-link.is-current{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .pagination-ellipsis{color:#9ca0b0;pointer-events:none}html.theme--catppuccin-latte .pagination-list{flex-wrap:wrap}html.theme--catppuccin-latte .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-latte .pagination{flex-wrap:wrap}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-latte .pagination-previous{order:2}html.theme--catppuccin-latte .pagination-next{order:3}html.theme--catppuccin-latte .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-latte .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-latte .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-latte .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-latte .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-latte .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-latte .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-latte .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-latte .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-latte .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-latte .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-latte .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-latte .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-latte .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-latte .panel.is-dark .panel-heading,html.theme--catppuccin-latte .content kbd.panel .panel-heading{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-latte .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#ccd0da}html.theme--catppuccin-latte .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-latte .content kbd.panel .panel-block.is-active .panel-icon{color:#ccd0da}html.theme--catppuccin-latte .panel.is-primary .panel-heading,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#1e66f5}html.theme--catppuccin-latte .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel.is-link .panel-heading{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1e66f5}html.theme--catppuccin-latte .panel.is-link .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel.is-info .panel-heading{background-color:#179299;color:#fff}html.theme--catppuccin-latte .panel.is-info .panel-tabs a.is-active{border-bottom-color:#179299}html.theme--catppuccin-latte .panel.is-info .panel-block.is-active .panel-icon{color:#179299}html.theme--catppuccin-latte .panel.is-success .panel-heading{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .panel.is-success .panel-tabs a.is-active{border-bottom-color:#40a02b}html.theme--catppuccin-latte .panel.is-success .panel-block.is-active .panel-icon{color:#40a02b}html.theme--catppuccin-latte .panel.is-warning .panel-heading{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#df8e1d}html.theme--catppuccin-latte .panel.is-warning .panel-block.is-active .panel-icon{color:#df8e1d}html.theme--catppuccin-latte .panel.is-danger .panel-heading{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#d20f39}html.theme--catppuccin-latte .panel.is-danger .panel-block.is-active .panel-icon{color:#d20f39}html.theme--catppuccin-latte .panel-tabs:not(:last-child),html.theme--catppuccin-latte .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-latte .panel-heading{background-color:#bcc0cc;border-radius:8px 8px 0 0;color:#41445a;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-latte .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-latte .panel-tabs a{border-bottom:1px solid #acb0be;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-latte .panel-tabs a.is-active{border-bottom-color:#bcc0cc;color:#0b57ef}html.theme--catppuccin-latte .panel-list a{color:#4c4f69}html.theme--catppuccin-latte .panel-list a:hover{color:#1e66f5}html.theme--catppuccin-latte .panel-block{align-items:center;color:#41445a;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-latte .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-latte .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-latte .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-latte .panel-block.is-active{border-left-color:#1e66f5;color:#0b57ef}html.theme--catppuccin-latte .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-latte a.panel-block,html.theme--catppuccin-latte label.panel-block{cursor:pointer}html.theme--catppuccin-latte a.panel-block:hover,html.theme--catppuccin-latte label.panel-block:hover{background-color:#e6e9ef}html.theme--catppuccin-latte .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#616587;margin-right:.75em}html.theme--catppuccin-latte .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-latte .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--catppuccin-latte .tabs a{align-items:center;border-bottom-color:#acb0be;border-bottom-style:solid;border-bottom-width:1px;color:#4c4f69;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-latte .tabs a:hover{border-bottom-color:#41445a;color:#41445a}html.theme--catppuccin-latte .tabs li{display:block}html.theme--catppuccin-latte .tabs li.is-active a{border-bottom-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .tabs ul{align-items:center;border-bottom-color:#acb0be;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-latte .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-latte .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-latte .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-latte .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-latte .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-latte .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-latte .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-latte .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-latte .tabs.is-boxed a:hover{background-color:#e6e9ef;border-bottom-color:#acb0be}html.theme--catppuccin-latte .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#acb0be;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-latte .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .tabs.is-toggle a{border-color:#acb0be;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-latte .tabs.is-toggle a:hover{background-color:#e6e9ef;border-color:#9ca0b0;z-index:2}html.theme--catppuccin-latte .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-latte .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-latte .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-latte .tabs.is-toggle li.is-active a{background-color:#1e66f5;border-color:#1e66f5;color:#fff;z-index:1}html.theme--catppuccin-latte .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-latte .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-latte .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-latte .tabs.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-latte .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-latte .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-latte .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-latte .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-latte .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-latte .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-latte .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-latte .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-latte .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-latte .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .column.is-narrow,html.theme--catppuccin-latte .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full,html.theme--catppuccin-latte .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters,html.theme--catppuccin-latte .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds,html.theme--catppuccin-latte .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half,html.theme--catppuccin-latte .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third,html.theme--catppuccin-latte .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter,html.theme--catppuccin-latte .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth,html.theme--catppuccin-latte .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths,html.theme--catppuccin-latte .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths,html.theme--catppuccin-latte .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths,html.theme--catppuccin-latte .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters,html.theme--catppuccin-latte .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds,html.theme--catppuccin-latte .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half,html.theme--catppuccin-latte .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third,html.theme--catppuccin-latte .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter,html.theme--catppuccin-latte .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth,html.theme--catppuccin-latte .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths,html.theme--catppuccin-latte .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths,html.theme--catppuccin-latte .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths,html.theme--catppuccin-latte .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-latte .column.is-0,html.theme--catppuccin-latte .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0,html.theme--catppuccin-latte .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-latte .column.is-1,html.theme--catppuccin-latte .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1,html.theme--catppuccin-latte .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2,html.theme--catppuccin-latte .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2,html.theme--catppuccin-latte .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3,html.theme--catppuccin-latte .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3,html.theme--catppuccin-latte .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-latte .column.is-4,html.theme--catppuccin-latte .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4,html.theme--catppuccin-latte .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5,html.theme--catppuccin-latte .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5,html.theme--catppuccin-latte .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6,html.theme--catppuccin-latte .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6,html.theme--catppuccin-latte .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-latte .column.is-7,html.theme--catppuccin-latte .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7,html.theme--catppuccin-latte .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8,html.theme--catppuccin-latte .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8,html.theme--catppuccin-latte .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9,html.theme--catppuccin-latte .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9,html.theme--catppuccin-latte .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-latte .column.is-10,html.theme--catppuccin-latte .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10,html.theme--catppuccin-latte .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11,html.theme--catppuccin-latte .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11,html.theme--catppuccin-latte .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12,html.theme--catppuccin-latte .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12,html.theme--catppuccin-latte .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-latte .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-latte .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-latte .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-latte .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-latte .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-latte .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-latte .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-latte .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-latte .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-latte .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-latte .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-latte .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-latte .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-latte .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-latte .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-latte .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-latte .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-latte .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-latte .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-latte .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-latte .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-latte .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-latte .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-latte .columns.is-centered{justify-content:center}html.theme--catppuccin-latte .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-latte .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-latte .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-latte .columns.is-mobile{display:flex}html.theme--catppuccin-latte .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-latte .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-desktop{display:flex}}html.theme--catppuccin-latte .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-latte .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-latte .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-latte .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-latte .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-latte .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-latte .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-latte .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-latte .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-latte .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-latte .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-latte .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-latte .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-latte .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-latte .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-latte .tile.is-child{margin:0 !important}html.theme--catppuccin-latte .tile.is-parent{padding:.75rem}html.theme--catppuccin-latte .tile.is-vertical{flex-direction:column}html.theme--catppuccin-latte .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .tile:not(.is-child){display:flex}html.theme--catppuccin-latte .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-latte .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-latte .tile.is-3{flex:none;width:25%}html.theme--catppuccin-latte .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-latte .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-latte .tile.is-6{flex:none;width:50%}html.theme--catppuccin-latte .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-latte .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-latte .tile.is-9{flex:none;width:75%}html.theme--catppuccin-latte .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-latte .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-latte .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-latte .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-latte .hero .navbar{background:none}html.theme--catppuccin-latte .hero .tabs ul{border-bottom:none}html.theme--catppuccin-latte .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-white strong{color:inherit}html.theme--catppuccin-latte .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-latte .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-latte .hero.is-white .navbar-item,html.theme--catppuccin-latte .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-latte .hero.is-white a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-white .navbar-link:hover,html.theme--catppuccin-latte .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-latte .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-latte .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-black strong{color:inherit}html.theme--catppuccin-latte .hero.is-black .title{color:#fff}html.theme--catppuccin-latte .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-latte .hero.is-black .navbar-item,html.theme--catppuccin-latte .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-black a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-black .navbar-link:hover,html.theme--catppuccin-latte .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-latte .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-light strong{color:inherit}html.theme--catppuccin-latte .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-latte .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-latte .hero.is-light .navbar-item,html.theme--catppuccin-latte .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-light .navbar-link:hover,html.theme--catppuccin-latte .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-latte .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-latte .hero.is-dark,html.theme--catppuccin-latte .content kbd.hero{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-dark strong,html.theme--catppuccin-latte .content kbd.hero strong{color:inherit}html.theme--catppuccin-latte .hero.is-dark .title,html.theme--catppuccin-latte .content kbd.hero .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .subtitle,html.theme--catppuccin-latte .content kbd.hero .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-latte .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-latte .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-dark .subtitle strong,html.theme--catppuccin-latte .content kbd.hero .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-dark .navbar-menu,html.theme--catppuccin-latte .content kbd.hero .navbar-menu{background-color:#ccd0da}}html.theme--catppuccin-latte .hero.is-dark .navbar-item,html.theme--catppuccin-latte .content kbd.hero .navbar-item,html.theme--catppuccin-latte .hero.is-dark .navbar-link,html.theme--catppuccin-latte .content kbd.hero .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-dark .navbar-link:hover,html.theme--catppuccin-latte .content kbd.hero .navbar-link:hover,html.theme--catppuccin-latte .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.hero .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .tabs a,html.theme--catppuccin-latte .content kbd.hero .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-latte .hero.is-dark .tabs a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs li.is-active a{color:#ccd0da !important;opacity:1}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .hero.is-dark.is-bold,html.theme--catppuccin-latte .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #a7b8cc 0%, #ccd0da 71%, #d9dbe6 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-latte .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a7b8cc 0%, #ccd0da 71%, #d9dbe6 100%)}}html.theme--catppuccin-latte .hero.is-primary,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-primary strong,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-latte .hero.is-primary .title,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-latte .hero.is-primary .subtitle,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-primary .subtitle strong,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-primary .navbar-menu,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#1e66f5}}html.theme--catppuccin-latte .hero.is-primary .navbar-item,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-latte .hero.is-primary .navbar-link,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-primary .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-latte .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .hero.is-primary .tabs a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-primary .tabs a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#1e66f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .hero.is-primary.is-bold,html.theme--catppuccin-latte .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-latte .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}}html.theme--catppuccin-latte .hero.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-link strong{color:inherit}html.theme--catppuccin-latte .hero.is-link .title{color:#fff}html.theme--catppuccin-latte .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-link .navbar-menu{background-color:#1e66f5}}html.theme--catppuccin-latte .hero.is-link .navbar-item,html.theme--catppuccin-latte .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-link a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-link .navbar-link:hover,html.theme--catppuccin-latte .hero.is-link .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-link .tabs li.is-active a{color:#1e66f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}}html.theme--catppuccin-latte .hero.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-info strong{color:inherit}html.theme--catppuccin-latte .hero.is-info .title{color:#fff}html.theme--catppuccin-latte .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-info .navbar-menu{background-color:#179299}}html.theme--catppuccin-latte .hero.is-info .navbar-item,html.theme--catppuccin-latte .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-info a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-info .navbar-link:hover,html.theme--catppuccin-latte .hero.is-info .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-info .tabs li.is-active a{color:#179299 !important;opacity:1}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#179299}html.theme--catppuccin-latte .hero.is-info.is-bold{background-image:linear-gradient(141deg, #0a7367 0%, #179299 71%, #1591b4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0a7367 0%, #179299 71%, #1591b4 100%)}}html.theme--catppuccin-latte .hero.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-success strong{color:inherit}html.theme--catppuccin-latte .hero.is-success .title{color:#fff}html.theme--catppuccin-latte .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-success .navbar-menu{background-color:#40a02b}}html.theme--catppuccin-latte .hero.is-success .navbar-item,html.theme--catppuccin-latte .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-success a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-success .navbar-link:hover,html.theme--catppuccin-latte .hero.is-success .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-success .tabs li.is-active a{color:#40a02b !important;opacity:1}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#40a02b}html.theme--catppuccin-latte .hero.is-success.is-bold{background-image:linear-gradient(141deg, #3c7f19 0%, #40a02b 71%, #2dba2b 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #3c7f19 0%, #40a02b 71%, #2dba2b 100%)}}html.theme--catppuccin-latte .hero.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-warning strong{color:inherit}html.theme--catppuccin-latte .hero.is-warning .title{color:#fff}html.theme--catppuccin-latte .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-warning .navbar-menu{background-color:#df8e1d}}html.theme--catppuccin-latte .hero.is-warning .navbar-item,html.theme--catppuccin-latte .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-warning .navbar-link:hover,html.theme--catppuccin-latte .hero.is-warning .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-warning .tabs li.is-active a{color:#df8e1d !important;opacity:1}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #bc560d 0%, #df8e1d 71%, #eaba2b 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #bc560d 0%, #df8e1d 71%, #eaba2b 100%)}}html.theme--catppuccin-latte .hero.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-danger strong{color:inherit}html.theme--catppuccin-latte .hero.is-danger .title{color:#fff}html.theme--catppuccin-latte .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-danger .navbar-menu{background-color:#d20f39}}html.theme--catppuccin-latte .hero.is-danger .navbar-item,html.theme--catppuccin-latte .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-danger .navbar-link:hover,html.theme--catppuccin-latte .hero.is-danger .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-danger .tabs li.is-active a{color:#d20f39 !important;opacity:1}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#d20f39}html.theme--catppuccin-latte .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ab0343 0%, #d20f39 71%, #f00a16 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ab0343 0%, #d20f39 71%, #f00a16 100%)}}html.theme--catppuccin-latte .hero.is-small .hero-body,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-latte .hero.is-halfheight .hero-body,html.theme--catppuccin-latte .hero.is-fullheight .hero-body,html.theme--catppuccin-latte .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-latte .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-latte .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-latte .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-latte .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-latte .hero-video{overflow:hidden}html.theme--catppuccin-latte .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-latte .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero-video{display:none}}html.theme--catppuccin-latte .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero-buttons .button{display:flex}html.theme--catppuccin-latte .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-latte .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-latte .hero-head,html.theme--catppuccin-latte .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero-body{padding:3rem 3rem}}html.theme--catppuccin-latte .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .section{padding:3rem 3rem}html.theme--catppuccin-latte .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-latte .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-latte .footer{background-color:#e6e9ef;padding:3rem 1.5rem 6rem}html.theme--catppuccin-latte h1 .docs-heading-anchor,html.theme--catppuccin-latte h1 .docs-heading-anchor:hover,html.theme--catppuccin-latte h1 .docs-heading-anchor:visited,html.theme--catppuccin-latte h2 .docs-heading-anchor,html.theme--catppuccin-latte h2 .docs-heading-anchor:hover,html.theme--catppuccin-latte h2 .docs-heading-anchor:visited,html.theme--catppuccin-latte h3 .docs-heading-anchor,html.theme--catppuccin-latte h3 .docs-heading-anchor:hover,html.theme--catppuccin-latte h3 .docs-heading-anchor:visited,html.theme--catppuccin-latte h4 .docs-heading-anchor,html.theme--catppuccin-latte h4 .docs-heading-anchor:hover,html.theme--catppuccin-latte h4 .docs-heading-anchor:visited,html.theme--catppuccin-latte h5 .docs-heading-anchor,html.theme--catppuccin-latte h5 .docs-heading-anchor:hover,html.theme--catppuccin-latte h5 .docs-heading-anchor:visited,html.theme--catppuccin-latte h6 .docs-heading-anchor,html.theme--catppuccin-latte h6 .docs-heading-anchor:hover,html.theme--catppuccin-latte h6 .docs-heading-anchor:visited{color:#4c4f69}html.theme--catppuccin-latte h1 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h2 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h3 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h4 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h5 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-latte h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-latte h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-latte .docs-dark-only{display:none !important}html.theme--catppuccin-latte pre{position:relative;overflow:hidden}html.theme--catppuccin-latte pre code,html.theme--catppuccin-latte pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-latte pre code:first-of-type,html.theme--catppuccin-latte pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-latte pre code:last-of-type,html.theme--catppuccin-latte pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-latte pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#4c4f69;cursor:pointer;text-align:center}html.theme--catppuccin-latte pre .copy-button:focus,html.theme--catppuccin-latte pre .copy-button:hover{opacity:1;background:rgba(76,79,105,0.1);color:#1e66f5}html.theme--catppuccin-latte pre .copy-button.success{color:#40a02b;opacity:1}html.theme--catppuccin-latte pre .copy-button.error{color:#d20f39;opacity:1}html.theme--catppuccin-latte pre:hover .copy-button{opacity:1}html.theme--catppuccin-latte .admonition{background-color:#e6e9ef;border-style:solid;border-width:2px;border-color:#5c5f77;border-radius:4px;font-size:1rem}html.theme--catppuccin-latte .admonition strong{color:currentColor}html.theme--catppuccin-latte .admonition.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-latte .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-latte .admonition.is-default{background-color:#e6e9ef;border-color:#5c5f77}html.theme--catppuccin-latte .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#5c5f77}html.theme--catppuccin-latte .admonition.is-default>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-info{background-color:#e6e9ef;border-color:#179299}html.theme--catppuccin-latte .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#179299}html.theme--catppuccin-latte .admonition.is-info>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-success{background-color:#e6e9ef;border-color:#40a02b}html.theme--catppuccin-latte .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#40a02b}html.theme--catppuccin-latte .admonition.is-success>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-warning{background-color:#e6e9ef;border-color:#df8e1d}html.theme--catppuccin-latte .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#df8e1d}html.theme--catppuccin-latte .admonition.is-warning>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-danger{background-color:#e6e9ef;border-color:#d20f39}html.theme--catppuccin-latte .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#d20f39}html.theme--catppuccin-latte .admonition.is-danger>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-compat{background-color:#e6e9ef;border-color:#04a5e5}html.theme--catppuccin-latte .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#04a5e5}html.theme--catppuccin-latte .admonition.is-compat>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition-header{color:#5c5f77;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-latte .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-latte details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-latte details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-latte details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-latte .admonition-body{color:#4c4f69;padding:0.5rem .75rem}html.theme--catppuccin-latte .admonition-body pre{background-color:#e6e9ef}html.theme--catppuccin-latte .admonition-body code{background-color:#e6e9ef}html.theme--catppuccin-latte .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #acb0be;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-latte .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#e6e9ef;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #acb0be;overflow:auto}html.theme--catppuccin-latte .docstring>header code{background-color:transparent}html.theme--catppuccin-latte .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-latte .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-latte .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-latte .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #acb0be}html.theme--catppuccin-latte .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-latte .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-latte .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-latte .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-latte .documenter-example-output{background-color:#eff1f5}html.theme--catppuccin-latte .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#e6e9ef;color:#4c4f69;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-latte .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-latte .outdated-warning-overlay a{color:#1e66f5}html.theme--catppuccin-latte .outdated-warning-overlay a:hover{color:#04a5e5}html.theme--catppuccin-latte .content pre{border:2px solid #acb0be;border-radius:4px}html.theme--catppuccin-latte .content code{font-weight:inherit}html.theme--catppuccin-latte .content a code{color:#1e66f5}html.theme--catppuccin-latte .content a:hover code{color:#04a5e5}html.theme--catppuccin-latte .content h1 code,html.theme--catppuccin-latte .content h2 code,html.theme--catppuccin-latte .content h3 code,html.theme--catppuccin-latte .content h4 code,html.theme--catppuccin-latte .content h5 code,html.theme--catppuccin-latte .content h6 code{color:#4c4f69}html.theme--catppuccin-latte .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-latte .content blockquote>ul:first-child,html.theme--catppuccin-latte .content blockquote>ol:first-child,html.theme--catppuccin-latte .content .admonition-body>ul:first-child,html.theme--catppuccin-latte .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-latte pre,html.theme--catppuccin-latte code{font-variant-ligatures:no-contextual}html.theme--catppuccin-latte .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-latte .breadcrumb a.is-disabled,html.theme--catppuccin-latte .breadcrumb a.is-disabled:hover{color:#41445a}html.theme--catppuccin-latte .hljs{background:initial !important}html.theme--catppuccin-latte .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-latte .katex-display,html.theme--catppuccin-latte mjx-container,html.theme--catppuccin-latte .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-latte html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-latte li.no-marker{list-style:none}html.theme--catppuccin-latte #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-latte #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main{width:100%}html.theme--catppuccin-latte #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-latte #documenter .docs-main>header,html.theme--catppuccin-latte #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar{background-color:#eff1f5;border-bottom:1px solid #acb0be;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-latte #documenter .docs-main section.footnotes{border-top:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-latte .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-latte #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #acb0be;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-latte #documenter .docs-sidebar{display:flex;flex-direction:column;color:#4c4f69;background-color:#e6e9ef;border-right:1px solid #acb0be;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-latte #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name a:hover{color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #acb0be;display:none;padding:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #acb0be;padding-bottom:1.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#4c4f69;background:#e6e9ef}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#4c4f69;background-color:#f2f4f7}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #acb0be;border-bottom:1px solid #acb0be;background-color:#dce0e8}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#dce0e8;color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#f2f4f7;color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-latte #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#fff}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#fff}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#fff}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#fff}}html.theme--catppuccin-latte kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-latte .search-min-width-50{min-width:50%}html.theme--catppuccin-latte .search-min-height-100{min-height:100%}html.theme--catppuccin-latte .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-latte .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover,html.theme--catppuccin-latte .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-latte .search-result-link .property-search-result-badge,html.theme--catppuccin-latte .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-latte .property-search-result-badge,html.theme--catppuccin-latte .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-latte .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:hover .search-filter,html.theme--catppuccin-latte .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-latte .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-latte .search-filter:hover,html.theme--catppuccin-latte .search-filter:focus{color:#333}html.theme--catppuccin-latte .search-filter-selected{color:#ccd0da;background-color:#7287fd}html.theme--catppuccin-latte .search-filter-selected:hover,html.theme--catppuccin-latte .search-filter-selected:focus{color:#ccd0da}html.theme--catppuccin-latte .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-latte .search-divider{border-bottom:1px solid #acb0be}html.theme--catppuccin-latte .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-latte .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-latte .w-100{width:100%}html.theme--catppuccin-latte .gap-2{gap:0.5rem}html.theme--catppuccin-latte .gap-4{gap:1rem}html.theme--catppuccin-latte .gap-8{gap:2rem}html.theme--catppuccin-latte{background-color:#eff1f5;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-latte a{transition:all 200ms ease}html.theme--catppuccin-latte .label{color:#4c4f69}html.theme--catppuccin-latte .button,html.theme--catppuccin-latte .control.has-icons-left .icon,html.theme--catppuccin-latte .control.has-icons-right .icon,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .select,html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea{height:2.5em;color:#4c4f69}html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#4c4f69}html.theme--catppuccin-latte .select:after,html.theme--catppuccin-latte .select select{border-width:1px}html.theme--catppuccin-latte .menu-list a{transition:all 300ms ease}html.theme--catppuccin-latte .modal-card-foot,html.theme--catppuccin-latte .modal-card-head{border-color:#acb0be}html.theme--catppuccin-latte .navbar{border-radius:.4em}html.theme--catppuccin-latte .navbar.is-transparent{background:none}html.theme--catppuccin-latte .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .navbar .navbar-menu{background-color:#1e66f5;border-radius:0 0 .4em .4em}}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){color:#ccd0da}html.theme--catppuccin-latte .tag.is-link:not(body),html.theme--catppuccin-latte .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-latte .content kbd.is-link:not(body){color:#ccd0da}html.theme--catppuccin-latte .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-latte .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-latte .ansi span.sgr3{font-style:italic}html.theme--catppuccin-latte .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-latte .ansi span.sgr7{color:#eff1f5;background-color:#4c4f69}html.theme--catppuccin-latte .ansi span.sgr8{color:transparent}html.theme--catppuccin-latte .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-latte .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-latte .ansi span.sgr30{color:#5c5f77}html.theme--catppuccin-latte .ansi span.sgr31{color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr32{color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr33{color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr34{color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr35{color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr36{color:#179299}html.theme--catppuccin-latte .ansi span.sgr37{color:#acb0be}html.theme--catppuccin-latte .ansi span.sgr40{background-color:#5c5f77}html.theme--catppuccin-latte .ansi span.sgr41{background-color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr42{background-color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr43{background-color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr44{background-color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr45{background-color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr46{background-color:#179299}html.theme--catppuccin-latte .ansi span.sgr47{background-color:#acb0be}html.theme--catppuccin-latte .ansi span.sgr90{color:#6c6f85}html.theme--catppuccin-latte .ansi span.sgr91{color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr92{color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr93{color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr94{color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr95{color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr96{color:#179299}html.theme--catppuccin-latte .ansi span.sgr97{color:#bcc0cc}html.theme--catppuccin-latte .ansi span.sgr100{background-color:#6c6f85}html.theme--catppuccin-latte .ansi span.sgr101{background-color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr102{background-color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr103{background-color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr104{background-color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr105{background-color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr106{background-color:#179299}html.theme--catppuccin-latte .ansi span.sgr107{background-color:#bcc0cc}html.theme--catppuccin-latte code.language-julia-repl>span.hljs-meta{color:#40a02b;font-weight:bolder}html.theme--catppuccin-latte code .hljs{color:#4c4f69;background:#eff1f5}html.theme--catppuccin-latte code .hljs-keyword{color:#8839ef}html.theme--catppuccin-latte code .hljs-built_in{color:#d20f39}html.theme--catppuccin-latte code .hljs-type{color:#df8e1d}html.theme--catppuccin-latte code .hljs-literal{color:#fe640b}html.theme--catppuccin-latte code .hljs-number{color:#fe640b}html.theme--catppuccin-latte code .hljs-operator{color:#179299}html.theme--catppuccin-latte code .hljs-punctuation{color:#5c5f77}html.theme--catppuccin-latte code .hljs-property{color:#179299}html.theme--catppuccin-latte code .hljs-regexp{color:#ea76cb}html.theme--catppuccin-latte code .hljs-string{color:#40a02b}html.theme--catppuccin-latte code .hljs-char.escape_{color:#40a02b}html.theme--catppuccin-latte code .hljs-subst{color:#6c6f85}html.theme--catppuccin-latte code .hljs-symbol{color:#dd7878}html.theme--catppuccin-latte code .hljs-variable{color:#8839ef}html.theme--catppuccin-latte code .hljs-variable.language_{color:#8839ef}html.theme--catppuccin-latte code .hljs-variable.constant_{color:#fe640b}html.theme--catppuccin-latte code .hljs-title{color:#1e66f5}html.theme--catppuccin-latte code .hljs-title.class_{color:#df8e1d}html.theme--catppuccin-latte code .hljs-title.function_{color:#1e66f5}html.theme--catppuccin-latte code .hljs-params{color:#4c4f69}html.theme--catppuccin-latte code .hljs-comment{color:#acb0be}html.theme--catppuccin-latte code .hljs-doctag{color:#d20f39}html.theme--catppuccin-latte code .hljs-meta{color:#fe640b}html.theme--catppuccin-latte code .hljs-section{color:#1e66f5}html.theme--catppuccin-latte code .hljs-tag{color:#6c6f85}html.theme--catppuccin-latte code .hljs-name{color:#8839ef}html.theme--catppuccin-latte code .hljs-attr{color:#1e66f5}html.theme--catppuccin-latte code .hljs-attribute{color:#40a02b}html.theme--catppuccin-latte code .hljs-bullet{color:#179299}html.theme--catppuccin-latte code .hljs-code{color:#40a02b}html.theme--catppuccin-latte code .hljs-emphasis{color:#d20f39;font-style:italic}html.theme--catppuccin-latte code .hljs-strong{color:#d20f39;font-weight:bold}html.theme--catppuccin-latte code .hljs-formula{color:#179299}html.theme--catppuccin-latte code .hljs-link{color:#209fb5;font-style:italic}html.theme--catppuccin-latte code .hljs-quote{color:#40a02b;font-style:italic}html.theme--catppuccin-latte code .hljs-selector-tag{color:#df8e1d}html.theme--catppuccin-latte code .hljs-selector-id{color:#1e66f5}html.theme--catppuccin-latte code .hljs-selector-class{color:#179299}html.theme--catppuccin-latte code .hljs-selector-attr{color:#8839ef}html.theme--catppuccin-latte code .hljs-selector-pseudo{color:#179299}html.theme--catppuccin-latte code .hljs-template-tag{color:#dd7878}html.theme--catppuccin-latte code .hljs-template-variable{color:#dd7878}html.theme--catppuccin-latte code .hljs-addition{color:#40a02b;background:rgba(166,227,161,0.15)}html.theme--catppuccin-latte code .hljs-deletion{color:#d20f39;background:rgba(243,139,168,0.15)}html.theme--catppuccin-latte .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover,html.theme--catppuccin-latte .search-result-link:focus{background-color:#ccd0da}html.theme--catppuccin-latte .search-result-link .property-search-result-badge,html.theme--catppuccin-latte .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:hover .search-filter,html.theme--catppuccin-latte .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:focus .search-filter{color:#ccd0da !important;background-color:#7287fd !important}html.theme--catppuccin-latte .search-result-title{color:#4c4f69}html.theme--catppuccin-latte .search-result-highlight{background-color:#d20f39;color:#e6e9ef}html.theme--catppuccin-latte .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-latte .w-100{width:100%}html.theme--catppuccin-latte .gap-2{gap:0.5rem}html.theme--catppuccin-latte .gap-4{gap:1rem} diff --git a/previews/PR306/assets/themes/catppuccin-macchiato.css b/previews/PR306/assets/themes/catppuccin-macchiato.css new file mode 100644 index 00000000..6ed16f8e --- /dev/null +++ b/previews/PR306/assets/themes/catppuccin-macchiato.css @@ -0,0 +1 @@ +html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato .file-name,html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-macchiato .pagination-previous:focus,html.theme--catppuccin-macchiato .pagination-next:focus,html.theme--catppuccin-macchiato .pagination-link:focus,html.theme--catppuccin-macchiato .pagination-ellipsis:focus,html.theme--catppuccin-macchiato .file-cta:focus,html.theme--catppuccin-macchiato .file-name:focus,html.theme--catppuccin-macchiato .select select:focus,html.theme--catppuccin-macchiato .textarea:focus,html.theme--catppuccin-macchiato .input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-macchiato .button:focus,html.theme--catppuccin-macchiato .is-focused.pagination-previous,html.theme--catppuccin-macchiato .is-focused.pagination-next,html.theme--catppuccin-macchiato .is-focused.pagination-link,html.theme--catppuccin-macchiato .is-focused.pagination-ellipsis,html.theme--catppuccin-macchiato .is-focused.file-cta,html.theme--catppuccin-macchiato .is-focused.file-name,html.theme--catppuccin-macchiato .select select.is-focused,html.theme--catppuccin-macchiato .is-focused.textarea,html.theme--catppuccin-macchiato .is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-focused.button,html.theme--catppuccin-macchiato .pagination-previous:active,html.theme--catppuccin-macchiato .pagination-next:active,html.theme--catppuccin-macchiato .pagination-link:active,html.theme--catppuccin-macchiato .pagination-ellipsis:active,html.theme--catppuccin-macchiato .file-cta:active,html.theme--catppuccin-macchiato .file-name:active,html.theme--catppuccin-macchiato .select select:active,html.theme--catppuccin-macchiato .textarea:active,html.theme--catppuccin-macchiato .input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-macchiato .button:active,html.theme--catppuccin-macchiato .is-active.pagination-previous,html.theme--catppuccin-macchiato .is-active.pagination-next,html.theme--catppuccin-macchiato .is-active.pagination-link,html.theme--catppuccin-macchiato .is-active.pagination-ellipsis,html.theme--catppuccin-macchiato .is-active.file-cta,html.theme--catppuccin-macchiato .is-active.file-name,html.theme--catppuccin-macchiato .select select.is-active,html.theme--catppuccin-macchiato .is-active.textarea,html.theme--catppuccin-macchiato .is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .is-active.button{outline:none}html.theme--catppuccin-macchiato .pagination-previous[disabled],html.theme--catppuccin-macchiato .pagination-next[disabled],html.theme--catppuccin-macchiato .pagination-link[disabled],html.theme--catppuccin-macchiato .pagination-ellipsis[disabled],html.theme--catppuccin-macchiato .file-cta[disabled],html.theme--catppuccin-macchiato .file-name[disabled],html.theme--catppuccin-macchiato .select select[disabled],html.theme--catppuccin-macchiato .textarea[disabled],html.theme--catppuccin-macchiato .input[disabled],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-macchiato .button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-macchiato .file-name,html.theme--catppuccin-macchiato fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-macchiato .select select,fieldset[disabled] html.theme--catppuccin-macchiato .textarea,fieldset[disabled] html.theme--catppuccin-macchiato .input,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato fieldset[disabled] .select select,html.theme--catppuccin-macchiato .select fieldset[disabled] select,html.theme--catppuccin-macchiato fieldset[disabled] .textarea,html.theme--catppuccin-macchiato fieldset[disabled] .input,html.theme--catppuccin-macchiato fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-macchiato .button,html.theme--catppuccin-macchiato fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-macchiato .tabs,html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .breadcrumb,html.theme--catppuccin-macchiato .file,html.theme--catppuccin-macchiato .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-macchiato .admonition:not(:last-child),html.theme--catppuccin-macchiato .tabs:not(:last-child),html.theme--catppuccin-macchiato .pagination:not(:last-child),html.theme--catppuccin-macchiato .message:not(:last-child),html.theme--catppuccin-macchiato .level:not(:last-child),html.theme--catppuccin-macchiato .breadcrumb:not(:last-child),html.theme--catppuccin-macchiato .block:not(:last-child),html.theme--catppuccin-macchiato .title:not(:last-child),html.theme--catppuccin-macchiato .subtitle:not(:last-child),html.theme--catppuccin-macchiato .table-container:not(:last-child),html.theme--catppuccin-macchiato .table:not(:last-child),html.theme--catppuccin-macchiato .progress:not(:last-child),html.theme--catppuccin-macchiato .notification:not(:last-child),html.theme--catppuccin-macchiato .content:not(:last-child),html.theme--catppuccin-macchiato .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .modal-close,html.theme--catppuccin-macchiato .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-macchiato .modal-close::before,html.theme--catppuccin-macchiato .delete::before,html.theme--catppuccin-macchiato .modal-close::after,html.theme--catppuccin-macchiato .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-macchiato .modal-close::before,html.theme--catppuccin-macchiato .delete::before{height:2px;width:50%}html.theme--catppuccin-macchiato .modal-close::after,html.theme--catppuccin-macchiato .delete::after{height:50%;width:2px}html.theme--catppuccin-macchiato .modal-close:hover,html.theme--catppuccin-macchiato .delete:hover,html.theme--catppuccin-macchiato .modal-close:focus,html.theme--catppuccin-macchiato .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-macchiato .modal-close:active,html.theme--catppuccin-macchiato .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-macchiato .is-small.modal-close,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-macchiato .is-small.delete,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-macchiato .is-medium.modal-close,html.theme--catppuccin-macchiato .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-macchiato .is-large.modal-close,html.theme--catppuccin-macchiato .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-macchiato .control.is-loading::after,html.theme--catppuccin-macchiato .select.is-loading::after,html.theme--catppuccin-macchiato .loader,html.theme--catppuccin-macchiato .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #8087a2;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-macchiato .hero-video,html.theme--catppuccin-macchiato .modal-background,html.theme--catppuccin-macchiato .modal,html.theme--catppuccin-macchiato .image.is-square img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-macchiato .image.is-square .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-macchiato .image.is-1by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-macchiato .image.is-1by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-macchiato .image.is-5by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-macchiato .image.is-4by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-macchiato .image.is-3by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-macchiato .image.is-5by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-16by9 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-macchiato .image.is-16by9 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-macchiato .image.is-2by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-macchiato .image.is-3by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-macchiato .image.is-4by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-macchiato .image.is-3by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-macchiato .image.is-2by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-macchiato .image.is-3by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-9by16 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-macchiato .image.is-9by16 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-macchiato .image.is-1by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-macchiato .image.is-1by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-macchiato .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363a4f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#212431 !important}.has-background-dark{background-color:#363a4f !important}.has-text-primary{color:#8aadf4 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#5b8cf0 !important}.has-background-primary{background-color:#8aadf4 !important}.has-text-primary-light{color:#ecf2fd !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bed1f9 !important}.has-background-primary-light{background-color:#ecf2fd !important}.has-text-primary-dark{color:#0e3b95 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#124dc4 !important}.has-background-primary-dark{background-color:#0e3b95 !important}.has-text-link{color:#8aadf4 !important}a.has-text-link:hover,a.has-text-link:focus{color:#5b8cf0 !important}.has-background-link{background-color:#8aadf4 !important}.has-text-link-light{color:#ecf2fd !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bed1f9 !important}.has-background-link-light{background-color:#ecf2fd !important}.has-text-link-dark{color:#0e3b95 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#124dc4 !important}.has-background-link-dark{background-color:#0e3b95 !important}.has-text-info{color:#8bd5ca !important}a.has-text-info:hover,a.has-text-info:focus{color:#66c7b9 !important}.has-background-info{background-color:#8bd5ca !important}.has-text-info-light{color:#f0faf8 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#cbece7 !important}.has-background-info-light{background-color:#f0faf8 !important}.has-text-info-dark{color:#276d62 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#359284 !important}.has-background-info-dark{background-color:#276d62 !important}.has-text-success{color:#a6da95 !important}a.has-text-success:hover,a.has-text-success:focus{color:#86cd6f !important}.has-background-success{background-color:#a6da95 !important}.has-text-success-light{color:#f2faf0 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#d3edca !important}.has-background-success-light{background-color:#f2faf0 !important}.has-text-success-dark{color:#386e26 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#4b9333 !important}.has-background-success-dark{background-color:#386e26 !important}.has-text-warning{color:#eed49f !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#e6c174 !important}.has-background-warning{background-color:#eed49f !important}.has-text-warning-light{color:#fcf7ee !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f4e4c2 !important}.has-background-warning-light{background-color:#fcf7ee !important}.has-text-warning-dark{color:#7e5c16 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#a97b1e !important}.has-background-warning-dark{background-color:#7e5c16 !important}.has-text-danger{color:#ed8796 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#e65b6f !important}.has-background-danger{background-color:#ed8796 !important}.has-text-danger-light{color:#fcedef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f6c1c9 !important}.has-background-danger-light{background-color:#fcedef !important}.has-text-danger-dark{color:#971729 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c31d36 !important}.has-background-danger-dark{background-color:#971729 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363a4f !important}.has-background-grey-darker{background-color:#363a4f !important}.has-text-grey-dark{color:#494d64 !important}.has-background-grey-dark{background-color:#494d64 !important}.has-text-grey{color:#5b6078 !important}.has-background-grey{background-color:#5b6078 !important}.has-text-grey-light{color:#6e738d !important}.has-background-grey-light{background-color:#6e738d !important}.has-text-grey-lighter{color:#8087a2 !important}.has-background-grey-lighter{background-color:#8087a2 !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--catppuccin-macchiato html{background-color:#24273a;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-macchiato article,html.theme--catppuccin-macchiato aside,html.theme--catppuccin-macchiato figure,html.theme--catppuccin-macchiato footer,html.theme--catppuccin-macchiato header,html.theme--catppuccin-macchiato hgroup,html.theme--catppuccin-macchiato section{display:block}html.theme--catppuccin-macchiato body,html.theme--catppuccin-macchiato button,html.theme--catppuccin-macchiato input,html.theme--catppuccin-macchiato optgroup,html.theme--catppuccin-macchiato select,html.theme--catppuccin-macchiato textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-macchiato code,html.theme--catppuccin-macchiato pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-macchiato body{color:#cad3f5;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-macchiato a{color:#8aadf4;cursor:pointer;text-decoration:none}html.theme--catppuccin-macchiato a strong{color:currentColor}html.theme--catppuccin-macchiato a:hover{color:#91d7e3}html.theme--catppuccin-macchiato code{background-color:#1e2030;color:#cad3f5;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-macchiato hr{background-color:#1e2030;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-macchiato img{height:auto;max-width:100%}html.theme--catppuccin-macchiato input[type="checkbox"],html.theme--catppuccin-macchiato input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-macchiato small{font-size:.875em}html.theme--catppuccin-macchiato span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-macchiato strong{color:#b5c1f1;font-weight:700}html.theme--catppuccin-macchiato fieldset{border:none}html.theme--catppuccin-macchiato pre{-webkit-overflow-scrolling:touch;background-color:#1e2030;color:#cad3f5;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-macchiato pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-macchiato table td,html.theme--catppuccin-macchiato table th{vertical-align:top}html.theme--catppuccin-macchiato table td:not([align]),html.theme--catppuccin-macchiato table th:not([align]){text-align:inherit}html.theme--catppuccin-macchiato table th{color:#b5c1f1}html.theme--catppuccin-macchiato .box{background-color:#494d64;border-radius:8px;box-shadow:none;color:#cad3f5;display:block;padding:1.25rem}html.theme--catppuccin-macchiato a.box:hover,html.theme--catppuccin-macchiato a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #8aadf4}html.theme--catppuccin-macchiato a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #8aadf4}html.theme--catppuccin-macchiato .button{background-color:#1e2030;border-color:#3b3f5f;border-width:1px;color:#8aadf4;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-macchiato .button strong{color:inherit}html.theme--catppuccin-macchiato .button .icon,html.theme--catppuccin-macchiato .button .icon.is-small,html.theme--catppuccin-macchiato .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-macchiato .button .icon.is-medium,html.theme--catppuccin-macchiato .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-macchiato .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-macchiato .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-macchiato .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-macchiato .button:hover,html.theme--catppuccin-macchiato .button.is-hovered{border-color:#6e738d;color:#b5c1f1}html.theme--catppuccin-macchiato .button:focus,html.theme--catppuccin-macchiato .button.is-focused{border-color:#6e738d;color:#739df2}html.theme--catppuccin-macchiato .button:focus:not(:active),html.theme--catppuccin-macchiato .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button:active,html.theme--catppuccin-macchiato .button.is-active{border-color:#494d64;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text{background-color:transparent;border-color:transparent;color:#cad3f5;text-decoration:underline}html.theme--catppuccin-macchiato .button.is-text:hover,html.theme--catppuccin-macchiato .button.is-text.is-hovered,html.theme--catppuccin-macchiato .button.is-text:focus,html.theme--catppuccin-macchiato .button.is-text.is-focused{background-color:#1e2030;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text:active,html.theme--catppuccin-macchiato .button.is-text.is-active{background-color:#141620;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-macchiato .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#8aadf4;text-decoration:none}html.theme--catppuccin-macchiato .button.is-ghost:hover,html.theme--catppuccin-macchiato .button.is-ghost.is-hovered{color:#8aadf4;text-decoration:underline}html.theme--catppuccin-macchiato .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:hover,html.theme--catppuccin-macchiato .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:focus,html.theme--catppuccin-macchiato .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:focus:not(:active),html.theme--catppuccin-macchiato .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .button.is-white:active,html.theme--catppuccin-macchiato .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-macchiato .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-macchiato .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-white.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:hover,html.theme--catppuccin-macchiato .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:focus,html.theme--catppuccin-macchiato .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:focus:not(:active),html.theme--catppuccin-macchiato .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .button.is-black:active,html.theme--catppuccin-macchiato .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-macchiato .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-black.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:hover,html.theme--catppuccin-macchiato .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:focus,html.theme--catppuccin-macchiato .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:focus:not(:active),html.theme--catppuccin-macchiato .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .button.is-light:active,html.theme--catppuccin-macchiato .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-macchiato .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-light.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-dark,html.theme--catppuccin-macchiato .content kbd.button{background-color:#363a4f;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:hover,html.theme--catppuccin-macchiato .content kbd.button:hover,html.theme--catppuccin-macchiato .button.is-dark.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-hovered{background-color:#313447;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:focus,html.theme--catppuccin-macchiato .content kbd.button:focus,html.theme--catppuccin-macchiato .button.is-dark.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:focus:not(:active),html.theme--catppuccin-macchiato .content kbd.button:focus:not(:active),html.theme--catppuccin-macchiato .button.is-dark.is-focused:not(:active),html.theme--catppuccin-macchiato .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .button.is-dark:active,html.theme--catppuccin-macchiato .content kbd.button:active,html.theme--catppuccin-macchiato .button.is-dark.is-active,html.theme--catppuccin-macchiato .content kbd.button.is-active{background-color:#2c2f40;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark[disabled],html.theme--catppuccin-macchiato .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button{background-color:#363a4f;border-color:#363a4f;box-shadow:none}html.theme--catppuccin-macchiato .button.is-dark.is-inverted,html.theme--catppuccin-macchiato .content kbd.button.is-inverted{background-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted:hover,html.theme--catppuccin-macchiato .content kbd.button.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-dark.is-inverted[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-loading::after,html.theme--catppuccin-macchiato .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined,html.theme--catppuccin-macchiato .content kbd.button.is-outlined{background-color:transparent;border-color:#363a4f;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-outlined:hover,html.theme--catppuccin-macchiato .content kbd.button.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-dark.is-outlined:focus,html.theme--catppuccin-macchiato .content kbd.button.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-focused{background-color:#363a4f;border-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363a4f #363a4f !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-outlined{background-color:transparent;border-color:#363a4f;box-shadow:none;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363a4f #363a4f !important}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:focus:not(:active),html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-macchiato .button.is-primary.is-focused:not(:active),html.theme--catppuccin-macchiato .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button.is-primary:active,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-macchiato .button.is-primary.is-active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-active.docs-sourcelink{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink{background-color:#8aadf4;border-color:#8aadf4;box-shadow:none}html.theme--catppuccin-macchiato .button.is-primary.is-inverted,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-primary.is-inverted[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-loading::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-outlined:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-macchiato .button.is-primary.is-outlined:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8aadf4;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-light,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-primary.is-light:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-light.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e1eafc;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-primary.is-light:active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-macchiato .button.is-primary.is-light.is-active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d5e2fb;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:hover,html.theme--catppuccin-macchiato .button.is-link.is-hovered{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:focus,html.theme--catppuccin-macchiato .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:focus:not(:active),html.theme--catppuccin-macchiato .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button.is-link:active,html.theme--catppuccin-macchiato .button.is-link.is-active{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link{background-color:#8aadf4;border-color:#8aadf4;box-shadow:none}html.theme--catppuccin-macchiato .button.is-link.is-inverted{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined{background-color:transparent;border-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-link.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-focused{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-outlined{background-color:transparent;border-color:#8aadf4;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-light{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link.is-light:hover,html.theme--catppuccin-macchiato .button.is-link.is-light.is-hovered{background-color:#e1eafc;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link.is-light:active,html.theme--catppuccin-macchiato .button.is-link.is-light.is-active{background-color:#d5e2fb;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-info{background-color:#8bd5ca;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:hover,html.theme--catppuccin-macchiato .button.is-info.is-hovered{background-color:#82d2c6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:focus,html.theme--catppuccin-macchiato .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:focus:not(:active),html.theme--catppuccin-macchiato .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .button.is-info:active,html.theme--catppuccin-macchiato .button.is-info.is-active{background-color:#78cec1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info{background-color:#8bd5ca;border-color:#8bd5ca;box-shadow:none}html.theme--catppuccin-macchiato .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined{background-color:transparent;border-color:#8bd5ca;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-info.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-focused{background-color:#8bd5ca;border-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #8bd5ca #8bd5ca !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-outlined{background-color:transparent;border-color:#8bd5ca;box-shadow:none;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8bd5ca #8bd5ca !important}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-light{background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .button.is-info.is-light:hover,html.theme--catppuccin-macchiato .button.is-info.is-light.is-hovered{background-color:#e7f6f4;border-color:transparent;color:#276d62}html.theme--catppuccin-macchiato .button.is-info.is-light:active,html.theme--catppuccin-macchiato .button.is-info.is-light.is-active{background-color:#ddf3f0;border-color:transparent;color:#276d62}html.theme--catppuccin-macchiato .button.is-success{background-color:#a6da95;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:hover,html.theme--catppuccin-macchiato .button.is-success.is-hovered{background-color:#9ed78c;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:focus,html.theme--catppuccin-macchiato .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:focus:not(:active),html.theme--catppuccin-macchiato .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .button.is-success:active,html.theme--catppuccin-macchiato .button.is-success.is-active{background-color:#96d382;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success{background-color:#a6da95;border-color:#a6da95;box-shadow:none}html.theme--catppuccin-macchiato .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined{background-color:transparent;border-color:#a6da95;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-success.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-focused{background-color:#a6da95;border-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6da95 #a6da95 !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-outlined{background-color:transparent;border-color:#a6da95;box-shadow:none;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6da95 #a6da95 !important}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-light{background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .button.is-success.is-light:hover,html.theme--catppuccin-macchiato .button.is-success.is-light.is-hovered{background-color:#eaf6e6;border-color:transparent;color:#386e26}html.theme--catppuccin-macchiato .button.is-success.is-light:active,html.theme--catppuccin-macchiato .button.is-success.is-light.is-active{background-color:#e2f3dd;border-color:transparent;color:#386e26}html.theme--catppuccin-macchiato .button.is-warning{background-color:#eed49f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:hover,html.theme--catppuccin-macchiato .button.is-warning.is-hovered{background-color:#eccf94;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:focus,html.theme--catppuccin-macchiato .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:focus:not(:active),html.theme--catppuccin-macchiato .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .button.is-warning:active,html.theme--catppuccin-macchiato .button.is-warning.is-active{background-color:#eaca89;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning{background-color:#eed49f;border-color:#eed49f;box-shadow:none}html.theme--catppuccin-macchiato .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined{background-color:transparent;border-color:#eed49f;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-warning.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-focused{background-color:#eed49f;border-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #eed49f #eed49f !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-outlined{background-color:transparent;border-color:#eed49f;box-shadow:none;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #eed49f #eed49f !important}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-light{background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-warning.is-light:hover,html.theme--catppuccin-macchiato .button.is-warning.is-light.is-hovered{background-color:#faf2e3;border-color:transparent;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-warning.is-light:active,html.theme--catppuccin-macchiato .button.is-warning.is-light.is-active{background-color:#f8eed8;border-color:transparent;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-danger{background-color:#ed8796;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:hover,html.theme--catppuccin-macchiato .button.is-danger.is-hovered{background-color:#eb7c8c;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:focus,html.theme--catppuccin-macchiato .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:focus:not(:active),html.theme--catppuccin-macchiato .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .button.is-danger:active,html.theme--catppuccin-macchiato .button.is-danger.is-active{background-color:#ea7183;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger{background-color:#ed8796;border-color:#ed8796;box-shadow:none}html.theme--catppuccin-macchiato .button.is-danger.is-inverted{background-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined{background-color:transparent;border-color:#ed8796;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-danger.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-focused{background-color:#ed8796;border-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #ed8796 #ed8796 !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-outlined{background-color:transparent;border-color:#ed8796;box-shadow:none;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ed8796 #ed8796 !important}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-light{background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .button.is-danger.is-light:hover,html.theme--catppuccin-macchiato .button.is-danger.is-light.is-hovered{background-color:#fbe2e6;border-color:transparent;color:#971729}html.theme--catppuccin-macchiato .button.is-danger.is-light:active,html.theme--catppuccin-macchiato .button.is-danger.is-light.is-active{background-color:#f9d7dc;border-color:transparent;color:#971729}html.theme--catppuccin-macchiato .button.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-small:not(.is-rounded),html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-macchiato .button.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .button.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .button.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button{background-color:#6e738d;border-color:#5b6078;box-shadow:none;opacity:.5}html.theme--catppuccin-macchiato .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-macchiato .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-macchiato .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-macchiato .button.is-static{background-color:#1e2030;border-color:#5b6078;color:#8087a2;box-shadow:none;pointer-events:none}html.theme--catppuccin-macchiato .button.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-macchiato .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-macchiato .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-macchiato .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-macchiato .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-macchiato .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-macchiato .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-macchiato .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-macchiato .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-macchiato .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-macchiato .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-macchiato .buttons.has-addons .button:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-macchiato .buttons.has-addons .button:focus,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-focused,html.theme--catppuccin-macchiato .buttons.has-addons .button:active,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-active,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-macchiato .buttons.has-addons .button:focus:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button:active:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-macchiato .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .buttons.is-centered{justify-content:center}html.theme--catppuccin-macchiato .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-macchiato .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .button.is-responsive.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-macchiato .button.is-responsive,html.theme--catppuccin-macchiato .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-macchiato .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .button.is-responsive.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-macchiato .button.is-responsive,html.theme--catppuccin-macchiato .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-macchiato .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-macchiato .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-macchiato .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-macchiato .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-macchiato .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-macchiato .content li+li{margin-top:0.25em}html.theme--catppuccin-macchiato .content p:not(:last-child),html.theme--catppuccin-macchiato .content dl:not(:last-child),html.theme--catppuccin-macchiato .content ol:not(:last-child),html.theme--catppuccin-macchiato .content ul:not(:last-child),html.theme--catppuccin-macchiato .content blockquote:not(:last-child),html.theme--catppuccin-macchiato .content pre:not(:last-child),html.theme--catppuccin-macchiato .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-macchiato .content h1,html.theme--catppuccin-macchiato .content h2,html.theme--catppuccin-macchiato .content h3,html.theme--catppuccin-macchiato .content h4,html.theme--catppuccin-macchiato .content h5,html.theme--catppuccin-macchiato .content h6{color:#cad3f5;font-weight:600;line-height:1.125}html.theme--catppuccin-macchiato .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-macchiato .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-macchiato .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-macchiato .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-macchiato .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-macchiato .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-macchiato .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-macchiato .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-macchiato .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-macchiato .content blockquote{background-color:#1e2030;border-left:5px solid #5b6078;padding:1.25em 1.5em}html.theme--catppuccin-macchiato .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-macchiato .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-macchiato .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-macchiato .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-macchiato .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-macchiato .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-macchiato .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-macchiato .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-macchiato .content ul ul ul{list-style-type:square}html.theme--catppuccin-macchiato .content dd{margin-left:2em}html.theme--catppuccin-macchiato .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-macchiato .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-macchiato .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-macchiato .content figure img{display:inline-block}html.theme--catppuccin-macchiato .content figure figcaption{font-style:italic}html.theme--catppuccin-macchiato .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-macchiato .content sup,html.theme--catppuccin-macchiato .content sub{font-size:75%}html.theme--catppuccin-macchiato .content table{width:100%}html.theme--catppuccin-macchiato .content table td,html.theme--catppuccin-macchiato .content table th{border:1px solid #5b6078;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-macchiato .content table th{color:#b5c1f1}html.theme--catppuccin-macchiato .content table th:not([align]){text-align:inherit}html.theme--catppuccin-macchiato .content table thead td,html.theme--catppuccin-macchiato .content table thead th{border-width:0 0 2px;color:#b5c1f1}html.theme--catppuccin-macchiato .content table tfoot td,html.theme--catppuccin-macchiato .content table tfoot th{border-width:2px 0 0;color:#b5c1f1}html.theme--catppuccin-macchiato .content table tbody tr:last-child td,html.theme--catppuccin-macchiato .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-macchiato .content .tabs li+li{margin-top:0}html.theme--catppuccin-macchiato .content.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-macchiato .content.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .content.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .content.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-macchiato .icon.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-macchiato .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-macchiato .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-macchiato .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-macchiato .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-macchiato .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-macchiato div.icon-text{display:flex}html.theme--catppuccin-macchiato .image,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-macchiato .image img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-macchiato .image img.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-macchiato .image.is-fullwidth,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .image.is-square img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-macchiato .image.is-square .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-macchiato .image.is-1by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-macchiato .image.is-1by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-macchiato .image.is-5by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-macchiato .image.is-4by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-macchiato .image.is-3by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-macchiato .image.is-5by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-16by9 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-macchiato .image.is-16by9 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-macchiato .image.is-2by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-macchiato .image.is-3by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-macchiato .image.is-4by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-macchiato .image.is-3by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-macchiato .image.is-2by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-macchiato .image.is-3by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-9by16 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-macchiato .image.is-9by16 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-macchiato .image.is-1by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-macchiato .image.is-1by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-macchiato .image.is-square,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-macchiato .image.is-1by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-macchiato .image.is-5by4,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-macchiato .image.is-4by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-macchiato .image.is-3by2,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-macchiato .image.is-5by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-macchiato .image.is-16by9,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-macchiato .image.is-2by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-macchiato .image.is-3by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-macchiato .image.is-4by5,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-macchiato .image.is-3by4,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-macchiato .image.is-2by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-macchiato .image.is-3by5,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-macchiato .image.is-9by16,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-macchiato .image.is-1by2,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-macchiato .image.is-1by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-macchiato .image.is-16x16,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-macchiato .image.is-24x24,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-macchiato .image.is-32x32,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-macchiato .image.is-48x48,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-macchiato .image.is-64x64,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-macchiato .image.is-96x96,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-macchiato .image.is-128x128,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-macchiato .notification{background-color:#1e2030;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-macchiato .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-macchiato .notification strong{color:currentColor}html.theme--catppuccin-macchiato .notification code,html.theme--catppuccin-macchiato .notification pre{background:#fff}html.theme--catppuccin-macchiato .notification pre code{background:transparent}html.theme--catppuccin-macchiato .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-macchiato .notification .title,html.theme--catppuccin-macchiato .notification .subtitle,html.theme--catppuccin-macchiato .notification .content{color:currentColor}html.theme--catppuccin-macchiato .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-dark,html.theme--catppuccin-macchiato .content kbd.notification{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .notification.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.notification.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .notification.is-primary.is-light,html.theme--catppuccin-macchiato .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .notification.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .notification.is-link.is-light{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .notification.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-info.is-light{background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .notification.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-success.is-light{background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .notification.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-warning.is-light{background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .notification.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .notification.is-danger.is-light{background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-macchiato .progress::-webkit-progress-bar{background-color:#494d64}html.theme--catppuccin-macchiato .progress::-webkit-progress-value{background-color:#8087a2}html.theme--catppuccin-macchiato .progress::-moz-progress-bar{background-color:#8087a2}html.theme--catppuccin-macchiato .progress::-ms-fill{background-color:#8087a2;border:none}html.theme--catppuccin-macchiato .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-macchiato .content kbd.progress::-webkit-progress-value{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-macchiato .content kbd.progress::-moz-progress-bar{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark::-ms-fill,html.theme--catppuccin-macchiato .content kbd.progress::-ms-fill{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark:indeterminate,html.theme--catppuccin-macchiato .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363a4f 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary::-ms-fill,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary:indeterminate,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #8aadf4 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-link::-webkit-progress-value{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link::-moz-progress-bar{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link::-ms-fill{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link:indeterminate{background-image:linear-gradient(to right, #8aadf4 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-info::-webkit-progress-value{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info::-moz-progress-bar{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info::-ms-fill{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info:indeterminate{background-image:linear-gradient(to right, #8bd5ca 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-success::-webkit-progress-value{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success::-moz-progress-bar{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success::-ms-fill{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6da95 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-warning::-webkit-progress-value{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning::-moz-progress-bar{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning::-ms-fill{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #eed49f 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-danger::-webkit-progress-value{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger::-moz-progress-bar{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger::-ms-fill{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #ed8796 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#494d64;background-image:linear-gradient(to right, #cad3f5 30%, #494d64 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-macchiato .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-macchiato .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-macchiato .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-macchiato .progress.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-macchiato .progress.is-medium{height:1.25rem}html.theme--catppuccin-macchiato .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-macchiato .table{background-color:#494d64;color:#cad3f5}html.theme--catppuccin-macchiato .table td,html.theme--catppuccin-macchiato .table th{border:1px solid #5b6078;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-macchiato .table td.is-white,html.theme--catppuccin-macchiato .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .table td.is-black,html.theme--catppuccin-macchiato .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .table td.is-light,html.theme--catppuccin-macchiato .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-dark,html.theme--catppuccin-macchiato .table th.is-dark{background-color:#363a4f;border-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .table td.is-primary,html.theme--catppuccin-macchiato .table th.is-primary{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-link,html.theme--catppuccin-macchiato .table th.is-link{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-info,html.theme--catppuccin-macchiato .table th.is-info{background-color:#8bd5ca;border-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-success,html.theme--catppuccin-macchiato .table th.is-success{background-color:#a6da95;border-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-warning,html.theme--catppuccin-macchiato .table th.is-warning{background-color:#eed49f;border-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-danger,html.theme--catppuccin-macchiato .table th.is-danger{background-color:#ed8796;border-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .table td.is-narrow,html.theme--catppuccin-macchiato .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-macchiato .table td.is-selected,html.theme--catppuccin-macchiato .table th.is-selected{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-selected a,html.theme--catppuccin-macchiato .table td.is-selected strong,html.theme--catppuccin-macchiato .table th.is-selected a,html.theme--catppuccin-macchiato .table th.is-selected strong{color:currentColor}html.theme--catppuccin-macchiato .table td.is-vcentered,html.theme--catppuccin-macchiato .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-macchiato .table th{color:#b5c1f1}html.theme--catppuccin-macchiato .table th:not([align]){text-align:left}html.theme--catppuccin-macchiato .table tr.is-selected{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table tr.is-selected a,html.theme--catppuccin-macchiato .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-macchiato .table tr.is-selected td,html.theme--catppuccin-macchiato .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-macchiato .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table thead td,html.theme--catppuccin-macchiato .table thead th{border-width:0 0 2px;color:#b5c1f1}html.theme--catppuccin-macchiato .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table tfoot td,html.theme--catppuccin-macchiato .table tfoot th{border-width:2px 0 0;color:#b5c1f1}html.theme--catppuccin-macchiato .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table tbody tr:last-child td,html.theme--catppuccin-macchiato .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-macchiato .table.is-bordered td,html.theme--catppuccin-macchiato .table.is-bordered th{border-width:1px}html.theme--catppuccin-macchiato .table.is-bordered tr:last-child td,html.theme--catppuccin-macchiato .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-macchiato .table.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#363a4f}html.theme--catppuccin-macchiato .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#363a4f}html.theme--catppuccin-macchiato .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#3a3e55}html.theme--catppuccin-macchiato .table.is-narrow td,html.theme--catppuccin-macchiato .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-macchiato .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#363a4f}html.theme--catppuccin-macchiato .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-macchiato .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .tags .tag,html.theme--catppuccin-macchiato .tags .content kbd,html.theme--catppuccin-macchiato .content .tags kbd,html.theme--catppuccin-macchiato .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-macchiato .tags .tag:not(:last-child),html.theme--catppuccin-macchiato .tags .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags kbd:not(:last-child),html.theme--catppuccin-macchiato .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-macchiato .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-macchiato .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-macchiato .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-macchiato .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-macchiato .tags.is-centered{justify-content:center}html.theme--catppuccin-macchiato .tags.is-centered .tag,html.theme--catppuccin-macchiato .tags.is-centered .content kbd,html.theme--catppuccin-macchiato .content .tags.is-centered kbd,html.theme--catppuccin-macchiato .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-macchiato .tags.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .tags.is-right .tag:not(:first-child),html.theme--catppuccin-macchiato .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-macchiato .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-macchiato .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-macchiato .tags.is-right .tag:not(:last-child),html.theme--catppuccin-macchiato .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-macchiato .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-macchiato .tags.has-addons .tag,html.theme--catppuccin-macchiato .tags.has-addons .content kbd,html.theme--catppuccin-macchiato .content .tags.has-addons kbd,html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-macchiato .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-macchiato .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-macchiato .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-macchiato .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-macchiato .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-macchiato .tag:not(body),html.theme--catppuccin-macchiato .content kbd:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#1e2030;border-radius:.4em;color:#cad3f5;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-macchiato .tag:not(body) .delete,html.theme--catppuccin-macchiato .content kbd:not(body) .delete,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-macchiato .tag.is-white:not(body),html.theme--catppuccin-macchiato .content kbd.is-white:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .tag.is-black:not(body),html.theme--catppuccin-macchiato .content kbd.is-black:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .tag.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-dark:not(body),html.theme--catppuccin-macchiato .content kbd:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-macchiato .content .docstring>section>kbd:not(body){background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .tag.is-primary:not(body),html.theme--catppuccin-macchiato .content kbd.is-primary:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .tag.is-primary.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .tag.is-link:not(body),html.theme--catppuccin-macchiato .content kbd.is-link:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .tag.is-link.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-link.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .tag.is-info:not(body),html.theme--catppuccin-macchiato .content kbd.is-info:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-info.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-info.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .tag.is-success:not(body),html.theme--catppuccin-macchiato .content kbd.is-success:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-success.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-success.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .tag.is-warning:not(body),html.theme--catppuccin-macchiato .content kbd.is-warning:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-warning.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .tag.is-danger:not(body),html.theme--catppuccin-macchiato .content kbd.is-danger:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .tag.is-danger.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .tag.is-normal:not(body),html.theme--catppuccin-macchiato .content kbd.is-normal:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-macchiato .tag.is-medium:not(body),html.theme--catppuccin-macchiato .content kbd.is-medium:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-macchiato .tag.is-large:not(body),html.theme--catppuccin-macchiato .content kbd.is-large:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-macchiato .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-macchiato .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-macchiato .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-macchiato .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-macchiato .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-macchiato .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-macchiato .tag.is-delete:not(body),html.theme--catppuccin-macchiato .content kbd.is-delete:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::before,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::before,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-macchiato .tag.is-delete:not(body)::after,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::after,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::before,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::before,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::after,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::after,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-macchiato .tag.is-delete:not(body):hover,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):hover,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-macchiato .tag.is-delete:not(body):focus,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):focus,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#141620}html.theme--catppuccin-macchiato .tag.is-delete:not(body):active,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):active,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#0a0b11}html.theme--catppuccin-macchiato .tag.is-rounded:not(body),html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-macchiato .content kbd.is-rounded:not(body),html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-macchiato a.tag:hover,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-macchiato .title,html.theme--catppuccin-macchiato .subtitle{word-break:break-word}html.theme--catppuccin-macchiato .title em,html.theme--catppuccin-macchiato .title span,html.theme--catppuccin-macchiato .subtitle em,html.theme--catppuccin-macchiato .subtitle span{font-weight:inherit}html.theme--catppuccin-macchiato .title sub,html.theme--catppuccin-macchiato .subtitle sub{font-size:.75em}html.theme--catppuccin-macchiato .title sup,html.theme--catppuccin-macchiato .subtitle sup{font-size:.75em}html.theme--catppuccin-macchiato .title .tag,html.theme--catppuccin-macchiato .title .content kbd,html.theme--catppuccin-macchiato .content .title kbd,html.theme--catppuccin-macchiato .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-macchiato .subtitle .tag,html.theme--catppuccin-macchiato .subtitle .content kbd,html.theme--catppuccin-macchiato .content .subtitle kbd,html.theme--catppuccin-macchiato .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-macchiato .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-macchiato .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-macchiato .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-macchiato .title.is-1{font-size:3rem}html.theme--catppuccin-macchiato .title.is-2{font-size:2.5rem}html.theme--catppuccin-macchiato .title.is-3{font-size:2rem}html.theme--catppuccin-macchiato .title.is-4{font-size:1.5rem}html.theme--catppuccin-macchiato .title.is-5{font-size:1.25rem}html.theme--catppuccin-macchiato .title.is-6{font-size:1rem}html.theme--catppuccin-macchiato .title.is-7{font-size:.75rem}html.theme--catppuccin-macchiato .subtitle{color:#6e738d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-macchiato .subtitle strong{color:#6e738d;font-weight:600}html.theme--catppuccin-macchiato .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-macchiato .subtitle.is-1{font-size:3rem}html.theme--catppuccin-macchiato .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-macchiato .subtitle.is-3{font-size:2rem}html.theme--catppuccin-macchiato .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-macchiato .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-macchiato .subtitle.is-6{font-size:1rem}html.theme--catppuccin-macchiato .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-macchiato .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-macchiato .number{align-items:center;background-color:#1e2030;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{background-color:#24273a;border-color:#5b6078;border-radius:.4em;color:#8087a2}html.theme--catppuccin-macchiato .select select::-moz-placeholder,html.theme--catppuccin-macchiato .textarea::-moz-placeholder,html.theme--catppuccin-macchiato .input::-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select::-webkit-input-placeholder,html.theme--catppuccin-macchiato .textarea::-webkit-input-placeholder,html.theme--catppuccin-macchiato .input::-webkit-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:-moz-placeholder,html.theme--catppuccin-macchiato .textarea:-moz-placeholder,html.theme--catppuccin-macchiato .input:-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:-ms-input-placeholder,html.theme--catppuccin-macchiato .textarea:-ms-input-placeholder,html.theme--catppuccin-macchiato .input:-ms-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:hover,html.theme--catppuccin-macchiato .textarea:hover,html.theme--catppuccin-macchiato .input:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-macchiato .select select.is-hovered,html.theme--catppuccin-macchiato .is-hovered.textarea,html.theme--catppuccin-macchiato .is-hovered.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#6e738d}html.theme--catppuccin-macchiato .select select:focus,html.theme--catppuccin-macchiato .textarea:focus,html.theme--catppuccin-macchiato .input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-macchiato .select select.is-focused,html.theme--catppuccin-macchiato .is-focused.textarea,html.theme--catppuccin-macchiato .is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .select select:active,html.theme--catppuccin-macchiato .textarea:active,html.theme--catppuccin-macchiato .input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-macchiato .select select.is-active,html.theme--catppuccin-macchiato .is-active.textarea,html.theme--catppuccin-macchiato .is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#8aadf4;box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select select[disabled],html.theme--catppuccin-macchiato .textarea[disabled],html.theme--catppuccin-macchiato .input[disabled],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .select select,fieldset[disabled] html.theme--catppuccin-macchiato .textarea,fieldset[disabled] html.theme--catppuccin-macchiato .input,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{background-color:#6e738d;border-color:#1e2030;box-shadow:none;color:#f5f7fd}html.theme--catppuccin-macchiato .select select[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato .input[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato .input[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-macchiato .textarea[readonly],html.theme--catppuccin-macchiato .input[readonly],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-macchiato .is-white.textarea,html.theme--catppuccin-macchiato .is-white.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-macchiato .is-white.textarea:focus,html.theme--catppuccin-macchiato .is-white.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-macchiato .is-white.is-focused.textarea,html.theme--catppuccin-macchiato .is-white.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-white.textarea:active,html.theme--catppuccin-macchiato .is-white.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-macchiato .is-white.is-active.textarea,html.theme--catppuccin-macchiato .is-white.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .is-black.textarea,html.theme--catppuccin-macchiato .is-black.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-macchiato .is-black.textarea:focus,html.theme--catppuccin-macchiato .is-black.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-macchiato .is-black.is-focused.textarea,html.theme--catppuccin-macchiato .is-black.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-black.textarea:active,html.theme--catppuccin-macchiato .is-black.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-macchiato .is-black.is-active.textarea,html.theme--catppuccin-macchiato .is-black.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .is-light.textarea,html.theme--catppuccin-macchiato .is-light.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-macchiato .is-light.textarea:focus,html.theme--catppuccin-macchiato .is-light.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-macchiato .is-light.is-focused.textarea,html.theme--catppuccin-macchiato .is-light.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-light.textarea:active,html.theme--catppuccin-macchiato .is-light.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-macchiato .is-light.is-active.textarea,html.theme--catppuccin-macchiato .is-light.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .is-dark.textarea,html.theme--catppuccin-macchiato .content kbd.textarea,html.theme--catppuccin-macchiato .is-dark.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-macchiato .content kbd.input{border-color:#363a4f}html.theme--catppuccin-macchiato .is-dark.textarea:focus,html.theme--catppuccin-macchiato .content kbd.textarea:focus,html.theme--catppuccin-macchiato .is-dark.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-macchiato .content kbd.input:focus,html.theme--catppuccin-macchiato .is-dark.is-focused.textarea,html.theme--catppuccin-macchiato .content kbd.is-focused.textarea,html.theme--catppuccin-macchiato .is-dark.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .content kbd.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-dark.textarea:active,html.theme--catppuccin-macchiato .content kbd.textarea:active,html.theme--catppuccin-macchiato .is-dark.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-macchiato .content kbd.input:active,html.theme--catppuccin-macchiato .is-dark.is-active.textarea,html.theme--catppuccin-macchiato .content kbd.is-active.textarea,html.theme--catppuccin-macchiato .is-dark.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .content kbd.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .is-primary.textarea,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink{border-color:#8aadf4}html.theme--catppuccin-macchiato .is-primary.textarea:focus,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-macchiato .is-primary.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-macchiato .is-primary.is-focused.textarea,html.theme--catppuccin-macchiato .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.textarea:active,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-macchiato .is-primary.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-macchiato .is-primary.is-active.textarea,html.theme--catppuccin-macchiato .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .is-link.textarea,html.theme--catppuccin-macchiato .is-link.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#8aadf4}html.theme--catppuccin-macchiato .is-link.textarea:focus,html.theme--catppuccin-macchiato .is-link.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-macchiato .is-link.is-focused.textarea,html.theme--catppuccin-macchiato .is-link.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-link.textarea:active,html.theme--catppuccin-macchiato .is-link.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-macchiato .is-link.is-active.textarea,html.theme--catppuccin-macchiato .is-link.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .is-info.textarea,html.theme--catppuccin-macchiato .is-info.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#8bd5ca}html.theme--catppuccin-macchiato .is-info.textarea:focus,html.theme--catppuccin-macchiato .is-info.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-macchiato .is-info.is-focused.textarea,html.theme--catppuccin-macchiato .is-info.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-info.textarea:active,html.theme--catppuccin-macchiato .is-info.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-macchiato .is-info.is-active.textarea,html.theme--catppuccin-macchiato .is-info.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .is-success.textarea,html.theme--catppuccin-macchiato .is-success.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6da95}html.theme--catppuccin-macchiato .is-success.textarea:focus,html.theme--catppuccin-macchiato .is-success.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-macchiato .is-success.is-focused.textarea,html.theme--catppuccin-macchiato .is-success.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-success.textarea:active,html.theme--catppuccin-macchiato .is-success.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-macchiato .is-success.is-active.textarea,html.theme--catppuccin-macchiato .is-success.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .is-warning.textarea,html.theme--catppuccin-macchiato .is-warning.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#eed49f}html.theme--catppuccin-macchiato .is-warning.textarea:focus,html.theme--catppuccin-macchiato .is-warning.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-macchiato .is-warning.is-focused.textarea,html.theme--catppuccin-macchiato .is-warning.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-warning.textarea:active,html.theme--catppuccin-macchiato .is-warning.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-macchiato .is-warning.is-active.textarea,html.theme--catppuccin-macchiato .is-warning.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .is-danger.textarea,html.theme--catppuccin-macchiato .is-danger.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#ed8796}html.theme--catppuccin-macchiato .is-danger.textarea:focus,html.theme--catppuccin-macchiato .is-danger.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-macchiato .is-danger.is-focused.textarea,html.theme--catppuccin-macchiato .is-danger.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-danger.textarea:active,html.theme--catppuccin-macchiato .is-danger.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-macchiato .is-danger.is-active.textarea,html.theme--catppuccin-macchiato .is-danger.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .is-small.textarea,html.theme--catppuccin-macchiato .is-small.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-macchiato .is-medium.textarea,html.theme--catppuccin-macchiato .is-medium.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .is-large.textarea,html.theme--catppuccin-macchiato .is-large.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .is-fullwidth.textarea,html.theme--catppuccin-macchiato .is-fullwidth.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-macchiato .is-inline.textarea,html.theme--catppuccin-macchiato .is-inline.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-macchiato .input.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-macchiato .input.is-static,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-macchiato .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-macchiato .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-macchiato .textarea[rows]{height:initial}html.theme--catppuccin-macchiato .textarea.has-fixed-size{resize:none}html.theme--catppuccin-macchiato .radio,html.theme--catppuccin-macchiato .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-macchiato .radio input,html.theme--catppuccin-macchiato .checkbox input{cursor:pointer}html.theme--catppuccin-macchiato .radio:hover,html.theme--catppuccin-macchiato .checkbox:hover{color:#91d7e3}html.theme--catppuccin-macchiato .radio[disabled],html.theme--catppuccin-macchiato .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .radio,fieldset[disabled] html.theme--catppuccin-macchiato .checkbox,html.theme--catppuccin-macchiato .radio input[disabled],html.theme--catppuccin-macchiato .checkbox input[disabled]{color:#f5f7fd;cursor:not-allowed}html.theme--catppuccin-macchiato .radio+.radio{margin-left:.5em}html.theme--catppuccin-macchiato .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-macchiato .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading)::after{border-color:#8aadf4;right:1.125em;z-index:4}html.theme--catppuccin-macchiato .select.is-rounded select,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-macchiato .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-macchiato .select select::-ms-expand{display:none}html.theme--catppuccin-macchiato .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-macchiato .select select:hover{border-color:#1e2030}html.theme--catppuccin-macchiato .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-macchiato .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-macchiato .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#91d7e3}html.theme--catppuccin-macchiato .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-macchiato .select.is-white select{border-color:#fff}html.theme--catppuccin-macchiato .select.is-white select:hover,html.theme--catppuccin-macchiato .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-macchiato .select.is-white select:focus,html.theme--catppuccin-macchiato .select.is-white select.is-focused,html.theme--catppuccin-macchiato .select.is-white select:active,html.theme--catppuccin-macchiato .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-macchiato .select.is-black select:hover,html.theme--catppuccin-macchiato .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-macchiato .select.is-black select:focus,html.theme--catppuccin-macchiato .select.is-black select.is-focused,html.theme--catppuccin-macchiato .select.is-black select:active,html.theme--catppuccin-macchiato .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-macchiato .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-macchiato .select.is-light select:hover,html.theme--catppuccin-macchiato .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-macchiato .select.is-light select:focus,html.theme--catppuccin-macchiato .select.is-light select.is-focused,html.theme--catppuccin-macchiato .select.is-light select:active,html.theme--catppuccin-macchiato .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .select.is-dark:not(:hover)::after,html.theme--catppuccin-macchiato .content kbd.select:not(:hover)::after{border-color:#363a4f}html.theme--catppuccin-macchiato .select.is-dark select,html.theme--catppuccin-macchiato .content kbd.select select{border-color:#363a4f}html.theme--catppuccin-macchiato .select.is-dark select:hover,html.theme--catppuccin-macchiato .content kbd.select select:hover,html.theme--catppuccin-macchiato .select.is-dark select.is-hovered,html.theme--catppuccin-macchiato .content kbd.select select.is-hovered{border-color:#2c2f40}html.theme--catppuccin-macchiato .select.is-dark select:focus,html.theme--catppuccin-macchiato .content kbd.select select:focus,html.theme--catppuccin-macchiato .select.is-dark select.is-focused,html.theme--catppuccin-macchiato .content kbd.select select.is-focused,html.theme--catppuccin-macchiato .select.is-dark select:active,html.theme--catppuccin-macchiato .content kbd.select select:active,html.theme--catppuccin-macchiato .select.is-dark select.is-active,html.theme--catppuccin-macchiato .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .select.is-primary:not(:hover)::after,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-primary select,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-primary select:hover,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-macchiato .select.is-primary select.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#739df2}html.theme--catppuccin-macchiato .select.is-primary select:focus,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-macchiato .select.is-primary select.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-macchiato .select.is-primary select:active,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-macchiato .select.is-primary select.is-active,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select.is-link:not(:hover)::after{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-link select{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-link select:hover,html.theme--catppuccin-macchiato .select.is-link select.is-hovered{border-color:#739df2}html.theme--catppuccin-macchiato .select.is-link select:focus,html.theme--catppuccin-macchiato .select.is-link select.is-focused,html.theme--catppuccin-macchiato .select.is-link select:active,html.theme--catppuccin-macchiato .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select.is-info:not(:hover)::after{border-color:#8bd5ca}html.theme--catppuccin-macchiato .select.is-info select{border-color:#8bd5ca}html.theme--catppuccin-macchiato .select.is-info select:hover,html.theme--catppuccin-macchiato .select.is-info select.is-hovered{border-color:#78cec1}html.theme--catppuccin-macchiato .select.is-info select:focus,html.theme--catppuccin-macchiato .select.is-info select.is-focused,html.theme--catppuccin-macchiato .select.is-info select:active,html.theme--catppuccin-macchiato .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .select.is-success:not(:hover)::after{border-color:#a6da95}html.theme--catppuccin-macchiato .select.is-success select{border-color:#a6da95}html.theme--catppuccin-macchiato .select.is-success select:hover,html.theme--catppuccin-macchiato .select.is-success select.is-hovered{border-color:#96d382}html.theme--catppuccin-macchiato .select.is-success select:focus,html.theme--catppuccin-macchiato .select.is-success select.is-focused,html.theme--catppuccin-macchiato .select.is-success select:active,html.theme--catppuccin-macchiato .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .select.is-warning:not(:hover)::after{border-color:#eed49f}html.theme--catppuccin-macchiato .select.is-warning select{border-color:#eed49f}html.theme--catppuccin-macchiato .select.is-warning select:hover,html.theme--catppuccin-macchiato .select.is-warning select.is-hovered{border-color:#eaca89}html.theme--catppuccin-macchiato .select.is-warning select:focus,html.theme--catppuccin-macchiato .select.is-warning select.is-focused,html.theme--catppuccin-macchiato .select.is-warning select:active,html.theme--catppuccin-macchiato .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .select.is-danger:not(:hover)::after{border-color:#ed8796}html.theme--catppuccin-macchiato .select.is-danger select{border-color:#ed8796}html.theme--catppuccin-macchiato .select.is-danger select:hover,html.theme--catppuccin-macchiato .select.is-danger select.is-hovered{border-color:#ea7183}html.theme--catppuccin-macchiato .select.is-danger select:focus,html.theme--catppuccin-macchiato .select.is-danger select.is-focused,html.theme--catppuccin-macchiato .select.is-danger select:active,html.theme--catppuccin-macchiato .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .select.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-macchiato .select.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .select.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .select.is-disabled::after{border-color:#f5f7fd !important;opacity:0.5}html.theme--catppuccin-macchiato .select.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .select.is-fullwidth select{width:100%}html.theme--catppuccin-macchiato .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-macchiato .select.is-loading.is-small:after,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-macchiato .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-macchiato .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-macchiato .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-macchiato .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:hover .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:focus .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:active .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-black:hover .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-black:focus .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-black:active .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:hover .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:focus .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:active .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-dark .file-cta,html.theme--catppuccin-macchiato .content kbd.file .file-cta{background-color:#363a4f;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-dark:hover .file-cta,html.theme--catppuccin-macchiato .content kbd.file:hover .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-hovered .file-cta{background-color:#313447;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-dark:focus .file-cta,html.theme--catppuccin-macchiato .content kbd.file:focus .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-focused .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,58,79,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-dark:active .file-cta,html.theme--catppuccin-macchiato .content kbd.file:active .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-active .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-active .file-cta{background-color:#2c2f40;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary:hover .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary:focus .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-focused .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(138,173,244,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-primary:active .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-active .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link .file-cta{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link:hover .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-hovered .file-cta{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link:focus .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(138,173,244,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-link:active .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-active .file-cta{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-info .file-cta{background-color:#8bd5ca;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:hover .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-hovered .file-cta{background-color:#82d2c6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:focus .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(139,213,202,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:active .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-active .file-cta{background-color:#78cec1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success .file-cta{background-color:#a6da95;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:hover .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-hovered .file-cta{background-color:#9ed78c;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:focus .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,218,149,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:active .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-active .file-cta{background-color:#96d382;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning .file-cta{background-color:#eed49f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:hover .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-hovered .file-cta{background-color:#eccf94;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:focus .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(238,212,159,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:active .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-active .file-cta{background-color:#eaca89;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-danger .file-cta{background-color:#ed8796;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-danger:hover .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-hovered .file-cta{background-color:#eb7c8c;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-danger:focus .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(237,135,150,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-danger:active .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-active .file-cta{background-color:#ea7183;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-macchiato .file.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .file.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-macchiato .file.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-macchiato .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-macchiato .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-macchiato .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-macchiato .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-macchiato .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-macchiato .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-macchiato .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-macchiato .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-macchiato .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-macchiato .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-macchiato .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-macchiato .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-macchiato .file.is-centered{justify-content:center}html.theme--catppuccin-macchiato .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-macchiato .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-macchiato .file.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-macchiato .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-macchiato .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-macchiato .file-label:hover .file-cta{background-color:#313447;color:#b5c1f1}html.theme--catppuccin-macchiato .file-label:hover .file-name{border-color:#565a71}html.theme--catppuccin-macchiato .file-label:active .file-cta{background-color:#2c2f40;color:#b5c1f1}html.theme--catppuccin-macchiato .file-label:active .file-name{border-color:#505469}html.theme--catppuccin-macchiato .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato .file-name{border-color:#5b6078;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-macchiato .file-cta{background-color:#363a4f;color:#cad3f5}html.theme--catppuccin-macchiato .file-name{border-color:#5b6078;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-macchiato .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-macchiato .file-icon .fa{font-size:14px}html.theme--catppuccin-macchiato .label{color:#b5c1f1;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-macchiato .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-macchiato .label.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-macchiato .label.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .label.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-macchiato .help.is-white{color:#fff}html.theme--catppuccin-macchiato .help.is-black{color:#0a0a0a}html.theme--catppuccin-macchiato .help.is-light{color:#f5f5f5}html.theme--catppuccin-macchiato .help.is-dark,html.theme--catppuccin-macchiato .content kbd.help{color:#363a4f}html.theme--catppuccin-macchiato .help.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.help.docs-sourcelink{color:#8aadf4}html.theme--catppuccin-macchiato .help.is-link{color:#8aadf4}html.theme--catppuccin-macchiato .help.is-info{color:#8bd5ca}html.theme--catppuccin-macchiato .help.is-success{color:#a6da95}html.theme--catppuccin-macchiato .help.is-warning{color:#eed49f}html.theme--catppuccin-macchiato .help.is-danger{color:#ed8796}html.theme--catppuccin-macchiato .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-macchiato .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-macchiato .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-macchiato .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-macchiato .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-macchiato .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-macchiato .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-macchiato .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-macchiato .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field.is-horizontal{display:flex}}html.theme--catppuccin-macchiato .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-macchiato .field-label.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-macchiato .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-macchiato .field-body .field{margin-bottom:0}html.theme--catppuccin-macchiato .field-body>.field{flex-shrink:1}html.theme--catppuccin-macchiato .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-macchiato .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-macchiato .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-macchiato .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select:focus~.icon{color:#363a4f}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-macchiato .control.has-icons-left .icon,html.theme--catppuccin-macchiato .control.has-icons-right .icon{color:#5b6078;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-macchiato .control.has-icons-left .input,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-macchiato .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-macchiato .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-macchiato .control.has-icons-right .input,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-macchiato .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-macchiato .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-macchiato .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-macchiato .control.is-loading.is-small:after,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-macchiato .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-macchiato .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-macchiato .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-macchiato .breadcrumb a{align-items:center;color:#8aadf4;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-macchiato .breadcrumb a:hover{color:#91d7e3}html.theme--catppuccin-macchiato .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-macchiato .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-macchiato .breadcrumb li.is-active a{color:#b5c1f1;cursor:default;pointer-events:none}html.theme--catppuccin-macchiato .breadcrumb li+li::before{color:#6e738d;content:"\0002f"}html.theme--catppuccin-macchiato .breadcrumb ul,html.theme--catppuccin-macchiato .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-macchiato .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-macchiato .breadcrumb.is-centered ol,html.theme--catppuccin-macchiato .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-macchiato .breadcrumb.is-right ol,html.theme--catppuccin-macchiato .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-macchiato .breadcrumb.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-macchiato .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-macchiato .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-macchiato .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-macchiato .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-macchiato .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#cad3f5;max-width:100%;position:relative}html.theme--catppuccin-macchiato .card-footer:first-child,html.theme--catppuccin-macchiato .card-content:first-child,html.theme--catppuccin-macchiato .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-macchiato .card-footer:last-child,html.theme--catppuccin-macchiato .card-content:last-child,html.theme--catppuccin-macchiato .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-macchiato .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-macchiato .card-header-title{align-items:center;color:#b5c1f1;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-macchiato .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-macchiato .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-macchiato .card-image{display:block;position:relative}html.theme--catppuccin-macchiato .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-macchiato .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-macchiato .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-macchiato .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-macchiato .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-macchiato .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-macchiato .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-macchiato .dropdown.is-active .dropdown-menu,html.theme--catppuccin-macchiato .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-macchiato .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-macchiato .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-macchiato .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-macchiato .dropdown-content{background-color:#1e2030;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-macchiato .dropdown-item{color:#cad3f5;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-macchiato a.dropdown-item,html.theme--catppuccin-macchiato button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-macchiato a.dropdown-item:hover,html.theme--catppuccin-macchiato button.dropdown-item:hover{background-color:#1e2030;color:#0a0a0a}html.theme--catppuccin-macchiato a.dropdown-item.is-active,html.theme--catppuccin-macchiato button.dropdown-item.is-active{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-macchiato .level{align-items:center;justify-content:space-between}html.theme--catppuccin-macchiato .level code{border-radius:.4em}html.theme--catppuccin-macchiato .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-macchiato .level.is-mobile{display:flex}html.theme--catppuccin-macchiato .level.is-mobile .level-left,html.theme--catppuccin-macchiato .level.is-mobile .level-right{display:flex}html.theme--catppuccin-macchiato .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-macchiato .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-macchiato .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level{display:flex}html.theme--catppuccin-macchiato .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-macchiato .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-macchiato .level-item .title,html.theme--catppuccin-macchiato .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-macchiato .level-left,html.theme--catppuccin-macchiato .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .level-left .level-item.is-flexible,html.theme--catppuccin-macchiato .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-left .level-item:not(:last-child),html.theme--catppuccin-macchiato .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-macchiato .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-left{display:flex}}html.theme--catppuccin-macchiato .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-right{display:flex}}html.theme--catppuccin-macchiato .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-macchiato .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-macchiato .media .media{border-top:1px solid rgba(91,96,120,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-macchiato .media .media .content:not(:last-child),html.theme--catppuccin-macchiato .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-macchiato .media .media .media{padding-top:.5rem}html.theme--catppuccin-macchiato .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-macchiato .media+.media{border-top:1px solid rgba(91,96,120,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-macchiato .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-macchiato .media-left,html.theme--catppuccin-macchiato .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .media-left{margin-right:1rem}html.theme--catppuccin-macchiato .media-right{margin-left:1rem}html.theme--catppuccin-macchiato .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .media-content{overflow-x:auto}}html.theme--catppuccin-macchiato .menu{font-size:1rem}html.theme--catppuccin-macchiato .menu.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-macchiato .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .menu.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .menu-list{line-height:1.25}html.theme--catppuccin-macchiato .menu-list a{border-radius:3px;color:#cad3f5;display:block;padding:0.5em 0.75em}html.theme--catppuccin-macchiato .menu-list a:hover{background-color:#1e2030;color:#b5c1f1}html.theme--catppuccin-macchiato .menu-list a.is-active{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .menu-list li ul{border-left:1px solid #5b6078;margin:.75em;padding-left:.75em}html.theme--catppuccin-macchiato .menu-label{color:#f5f7fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-macchiato .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-macchiato .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-macchiato .message{background-color:#1e2030;border-radius:.4em;font-size:1rem}html.theme--catppuccin-macchiato .message strong{color:currentColor}html.theme--catppuccin-macchiato .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-macchiato .message.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-macchiato .message.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .message.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .message.is-white{background-color:#fff}html.theme--catppuccin-macchiato .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-macchiato .message.is-black{background-color:#fafafa}html.theme--catppuccin-macchiato .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-macchiato .message.is-light{background-color:#fafafa}html.theme--catppuccin-macchiato .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-macchiato .message.is-dark,html.theme--catppuccin-macchiato .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-macchiato .message.is-dark .message-header,html.theme--catppuccin-macchiato .content kbd.message .message-header{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .message.is-dark .message-body,html.theme--catppuccin-macchiato .content kbd.message .message-body{border-color:#363a4f}html.theme--catppuccin-macchiato .message.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink{background-color:#ecf2fd}html.theme--catppuccin-macchiato .message.is-primary .message-header,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink .message-header{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .message.is-primary .message-body,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink .message-body{border-color:#8aadf4;color:#0e3b95}html.theme--catppuccin-macchiato .message.is-link{background-color:#ecf2fd}html.theme--catppuccin-macchiato .message.is-link .message-header{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .message.is-link .message-body{border-color:#8aadf4;color:#0e3b95}html.theme--catppuccin-macchiato .message.is-info{background-color:#f0faf8}html.theme--catppuccin-macchiato .message.is-info .message-header{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-info .message-body{border-color:#8bd5ca;color:#276d62}html.theme--catppuccin-macchiato .message.is-success{background-color:#f2faf0}html.theme--catppuccin-macchiato .message.is-success .message-header{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-success .message-body{border-color:#a6da95;color:#386e26}html.theme--catppuccin-macchiato .message.is-warning{background-color:#fcf7ee}html.theme--catppuccin-macchiato .message.is-warning .message-header{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-warning .message-body{border-color:#eed49f;color:#7e5c16}html.theme--catppuccin-macchiato .message.is-danger{background-color:#fcedef}html.theme--catppuccin-macchiato .message.is-danger .message-header{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .message.is-danger .message-body{border-color:#ed8796;color:#971729}html.theme--catppuccin-macchiato .message-header{align-items:center;background-color:#cad3f5;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-macchiato .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-macchiato .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .message-body{border-color:#5b6078;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#cad3f5;padding:1.25em 1.5em}html.theme--catppuccin-macchiato .message-body code,html.theme--catppuccin-macchiato .message-body pre{background-color:#fff}html.theme--catppuccin-macchiato .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-macchiato .modal.is-active{display:flex}html.theme--catppuccin-macchiato .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-macchiato .modal-content,html.theme--catppuccin-macchiato .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-macchiato .modal-content,html.theme--catppuccin-macchiato .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-macchiato .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-macchiato .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-macchiato .modal-card-head,html.theme--catppuccin-macchiato .modal-card-foot{align-items:center;background-color:#1e2030;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-macchiato .modal-card-head{border-bottom:1px solid #5b6078;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-macchiato .modal-card-title{color:#cad3f5;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-macchiato .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5b6078}html.theme--catppuccin-macchiato .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-macchiato .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#24273a;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-macchiato .navbar{background-color:#8aadf4;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-macchiato .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-macchiato .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-dark,html.theme--catppuccin-macchiato .content kbd.navbar{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-burger,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363a4f;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-burger,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6da95;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#eed49f;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#ed8796;color:#fff}}html.theme--catppuccin-macchiato .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-macchiato .navbar.has-shadow{box-shadow:0 2px 0 0 #1e2030}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom,html.theme--catppuccin-macchiato .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #1e2030}html.theme--catppuccin-macchiato .navbar.is-fixed-top{top:0}html.theme--catppuccin-macchiato html.has-navbar-fixed-top,html.theme--catppuccin-macchiato body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-macchiato .navbar-brand,html.theme--catppuccin-macchiato .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-macchiato .navbar-brand a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-macchiato .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-macchiato .navbar-burger{color:#cad3f5;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-macchiato .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-macchiato .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-macchiato .navbar-menu{display:none}html.theme--catppuccin-macchiato .navbar-item,html.theme--catppuccin-macchiato .navbar-link{color:#cad3f5;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-macchiato .navbar-item .icon:only-child,html.theme--catppuccin-macchiato .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-macchiato a.navbar-item,html.theme--catppuccin-macchiato .navbar-link{cursor:pointer}html.theme--catppuccin-macchiato a.navbar-item:focus,html.theme--catppuccin-macchiato a.navbar-item:focus-within,html.theme--catppuccin-macchiato a.navbar-item:hover,html.theme--catppuccin-macchiato a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar-link:focus,html.theme--catppuccin-macchiato .navbar-link:focus-within,html.theme--catppuccin-macchiato .navbar-link:hover,html.theme--catppuccin-macchiato .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}html.theme--catppuccin-macchiato .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .navbar-item img{max-height:1.75rem}html.theme--catppuccin-macchiato .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-macchiato .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-macchiato .navbar-item.is-tab:focus,html.theme--catppuccin-macchiato .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#8aadf4;border-bottom-style:solid;border-bottom-width:3px;color:#8aadf4;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-macchiato .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-macchiato .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-macchiato .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-macchiato .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .navbar>.container{display:block}html.theme--catppuccin-macchiato .navbar-brand .navbar-item,html.theme--catppuccin-macchiato .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-macchiato .navbar-link::after{display:none}html.theme--catppuccin-macchiato .navbar-menu{background-color:#8aadf4;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-macchiato .navbar-menu.is-active{display:block}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch,html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-macchiato .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-macchiato html.has-navbar-fixed-top-touch,html.theme--catppuccin-macchiato body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar,html.theme--catppuccin-macchiato .navbar-menu,html.theme--catppuccin-macchiato .navbar-start,html.theme--catppuccin-macchiato .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-macchiato .navbar{min-height:4rem}html.theme--catppuccin-macchiato .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-start,html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-macchiato .navbar.is-spaced a.navbar-item,html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8087a2}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}html.theme--catppuccin-macchiato .navbar-burger{display:none}html.theme--catppuccin-macchiato .navbar-item,html.theme--catppuccin-macchiato .navbar-link{align-items:center;display:flex}html.theme--catppuccin-macchiato .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-macchiato .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-macchiato .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-macchiato .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-macchiato .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-macchiato .navbar-dropdown{background-color:#8aadf4;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-macchiato .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8087a2}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-macchiato .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-macchiato .navbar-divider{display:block}html.theme--catppuccin-macchiato .navbar>.container .navbar-brand,html.theme--catppuccin-macchiato .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-macchiato .navbar>.container .navbar-menu,html.theme--catppuccin-macchiato .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-macchiato .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-macchiato html.has-navbar-fixed-top-desktop,html.theme--catppuccin-macchiato body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-macchiato html.has-spaced-navbar-fixed-top,html.theme--catppuccin-macchiato body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-macchiato html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-macchiato body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-macchiato a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar-link.is-active{color:#8aadf4}html.theme--catppuccin-macchiato a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-macchiato .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-macchiato .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-macchiato .pagination.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-macchiato .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-previous,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-next,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-link,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-macchiato .pagination,html.theme--catppuccin-macchiato .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link{border-color:#5b6078;color:#8aadf4;min-width:2.5em}html.theme--catppuccin-macchiato .pagination-previous:hover,html.theme--catppuccin-macchiato .pagination-next:hover,html.theme--catppuccin-macchiato .pagination-link:hover{border-color:#6e738d;color:#91d7e3}html.theme--catppuccin-macchiato .pagination-previous:focus,html.theme--catppuccin-macchiato .pagination-next:focus,html.theme--catppuccin-macchiato .pagination-link:focus{border-color:#6e738d}html.theme--catppuccin-macchiato .pagination-previous:active,html.theme--catppuccin-macchiato .pagination-next:active,html.theme--catppuccin-macchiato .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-macchiato .pagination-previous[disabled],html.theme--catppuccin-macchiato .pagination-previous.is-disabled,html.theme--catppuccin-macchiato .pagination-next[disabled],html.theme--catppuccin-macchiato .pagination-next.is-disabled,html.theme--catppuccin-macchiato .pagination-link[disabled],html.theme--catppuccin-macchiato .pagination-link.is-disabled{background-color:#5b6078;border-color:#5b6078;box-shadow:none;color:#f5f7fd;opacity:0.5}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-macchiato .pagination-link.is-current{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .pagination-ellipsis{color:#6e738d;pointer-events:none}html.theme--catppuccin-macchiato .pagination-list{flex-wrap:wrap}html.theme--catppuccin-macchiato .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .pagination{flex-wrap:wrap}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-macchiato .pagination-previous{order:2}html.theme--catppuccin-macchiato .pagination-next{order:3}html.theme--catppuccin-macchiato .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-macchiato .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-macchiato .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-macchiato .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-macchiato .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-macchiato .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-macchiato .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-macchiato .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-macchiato .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-macchiato .panel.is-dark .panel-heading,html.theme--catppuccin-macchiato .content kbd.panel .panel-heading{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-macchiato .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363a4f}html.theme--catppuccin-macchiato .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-macchiato .content kbd.panel .panel-block.is-active .panel-icon{color:#363a4f}html.theme--catppuccin-macchiato .panel.is-primary .panel-heading,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-link .panel-heading{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .panel.is-link .panel-tabs a.is-active{border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-link .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-info .panel-heading{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-info .panel-tabs a.is-active{border-bottom-color:#8bd5ca}html.theme--catppuccin-macchiato .panel.is-info .panel-block.is-active .panel-icon{color:#8bd5ca}html.theme--catppuccin-macchiato .panel.is-success .panel-heading{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6da95}html.theme--catppuccin-macchiato .panel.is-success .panel-block.is-active .panel-icon{color:#a6da95}html.theme--catppuccin-macchiato .panel.is-warning .panel-heading{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#eed49f}html.theme--catppuccin-macchiato .panel.is-warning .panel-block.is-active .panel-icon{color:#eed49f}html.theme--catppuccin-macchiato .panel.is-danger .panel-heading{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#ed8796}html.theme--catppuccin-macchiato .panel.is-danger .panel-block.is-active .panel-icon{color:#ed8796}html.theme--catppuccin-macchiato .panel-tabs:not(:last-child),html.theme--catppuccin-macchiato .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-macchiato .panel-heading{background-color:#494d64;border-radius:8px 8px 0 0;color:#b5c1f1;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-macchiato .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-macchiato .panel-tabs a{border-bottom:1px solid #5b6078;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-macchiato .panel-tabs a.is-active{border-bottom-color:#494d64;color:#739df2}html.theme--catppuccin-macchiato .panel-list a{color:#cad3f5}html.theme--catppuccin-macchiato .panel-list a:hover{color:#8aadf4}html.theme--catppuccin-macchiato .panel-block{align-items:center;color:#b5c1f1;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-macchiato .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-macchiato .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-macchiato .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-macchiato .panel-block.is-active{border-left-color:#8aadf4;color:#739df2}html.theme--catppuccin-macchiato .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-macchiato a.panel-block,html.theme--catppuccin-macchiato label.panel-block{cursor:pointer}html.theme--catppuccin-macchiato a.panel-block:hover,html.theme--catppuccin-macchiato label.panel-block:hover{background-color:#1e2030}html.theme--catppuccin-macchiato .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f5f7fd;margin-right:.75em}html.theme--catppuccin-macchiato .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-macchiato .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--catppuccin-macchiato .tabs a{align-items:center;border-bottom-color:#5b6078;border-bottom-style:solid;border-bottom-width:1px;color:#cad3f5;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-macchiato .tabs a:hover{border-bottom-color:#b5c1f1;color:#b5c1f1}html.theme--catppuccin-macchiato .tabs li{display:block}html.theme--catppuccin-macchiato .tabs li.is-active a{border-bottom-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .tabs ul{align-items:center;border-bottom-color:#5b6078;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-macchiato .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-macchiato .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-macchiato .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-macchiato .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-macchiato .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-macchiato .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-macchiato .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-macchiato .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-macchiato .tabs.is-boxed a:hover{background-color:#1e2030;border-bottom-color:#5b6078}html.theme--catppuccin-macchiato .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5b6078;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-macchiato .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .tabs.is-toggle a{border-color:#5b6078;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-macchiato .tabs.is-toggle a:hover{background-color:#1e2030;border-color:#6e738d;z-index:2}html.theme--catppuccin-macchiato .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-macchiato .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-macchiato .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-macchiato .tabs.is-toggle li.is-active a{background-color:#8aadf4;border-color:#8aadf4;color:#fff;z-index:1}html.theme--catppuccin-macchiato .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-macchiato .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-macchiato .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-macchiato .tabs.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-macchiato .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .column.is-narrow,html.theme--catppuccin-macchiato .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full,html.theme--catppuccin-macchiato .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters,html.theme--catppuccin-macchiato .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds,html.theme--catppuccin-macchiato .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half,html.theme--catppuccin-macchiato .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third,html.theme--catppuccin-macchiato .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter,html.theme--catppuccin-macchiato .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth,html.theme--catppuccin-macchiato .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths,html.theme--catppuccin-macchiato .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths,html.theme--catppuccin-macchiato .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths,html.theme--catppuccin-macchiato .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters,html.theme--catppuccin-macchiato .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds,html.theme--catppuccin-macchiato .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half,html.theme--catppuccin-macchiato .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third,html.theme--catppuccin-macchiato .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter,html.theme--catppuccin-macchiato .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth,html.theme--catppuccin-macchiato .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths,html.theme--catppuccin-macchiato .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths,html.theme--catppuccin-macchiato .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths,html.theme--catppuccin-macchiato .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0,html.theme--catppuccin-macchiato .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0,html.theme--catppuccin-macchiato .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1,html.theme--catppuccin-macchiato .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1,html.theme--catppuccin-macchiato .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2,html.theme--catppuccin-macchiato .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2,html.theme--catppuccin-macchiato .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3,html.theme--catppuccin-macchiato .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3,html.theme--catppuccin-macchiato .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4,html.theme--catppuccin-macchiato .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4,html.theme--catppuccin-macchiato .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5,html.theme--catppuccin-macchiato .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5,html.theme--catppuccin-macchiato .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6,html.theme--catppuccin-macchiato .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6,html.theme--catppuccin-macchiato .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7,html.theme--catppuccin-macchiato .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7,html.theme--catppuccin-macchiato .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8,html.theme--catppuccin-macchiato .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8,html.theme--catppuccin-macchiato .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9,html.theme--catppuccin-macchiato .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9,html.theme--catppuccin-macchiato .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10,html.theme--catppuccin-macchiato .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10,html.theme--catppuccin-macchiato .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11,html.theme--catppuccin-macchiato .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11,html.theme--catppuccin-macchiato .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12,html.theme--catppuccin-macchiato .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12,html.theme--catppuccin-macchiato .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-macchiato .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-macchiato .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-macchiato .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-macchiato .columns.is-centered{justify-content:center}html.theme--catppuccin-macchiato .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-macchiato .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-macchiato .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-macchiato .columns.is-mobile{display:flex}html.theme--catppuccin-macchiato .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-macchiato .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-desktop{display:flex}}html.theme--catppuccin-macchiato .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-macchiato .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-macchiato .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-macchiato .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-macchiato .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-macchiato .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-macchiato .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-macchiato .tile.is-child{margin:0 !important}html.theme--catppuccin-macchiato .tile.is-parent{padding:.75rem}html.theme--catppuccin-macchiato .tile.is-vertical{flex-direction:column}html.theme--catppuccin-macchiato .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .tile:not(.is-child){display:flex}html.theme--catppuccin-macchiato .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .tile.is-3{flex:none;width:25%}html.theme--catppuccin-macchiato .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .tile.is-6{flex:none;width:50%}html.theme--catppuccin-macchiato .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .tile.is-9{flex:none;width:75%}html.theme--catppuccin-macchiato .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-macchiato .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-macchiato .hero .navbar{background:none}html.theme--catppuccin-macchiato .hero .tabs ul{border-bottom:none}html.theme--catppuccin-macchiato .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-white strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-macchiato .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-macchiato .hero.is-white .navbar-item,html.theme--catppuccin-macchiato .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-macchiato .hero.is-white a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-white .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-macchiato .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-black strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-black .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-macchiato .hero.is-black .navbar-item,html.theme--catppuccin-macchiato .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-black a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-black .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-macchiato .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-light strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-macchiato .hero.is-light .navbar-item,html.theme--catppuccin-macchiato .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-light .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-macchiato .hero.is-dark,html.theme--catppuccin-macchiato .content kbd.hero{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-dark strong,html.theme--catppuccin-macchiato .content kbd.hero strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-dark .title,html.theme--catppuccin-macchiato .content kbd.hero .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .subtitle,html.theme--catppuccin-macchiato .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-macchiato .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-dark .subtitle strong,html.theme--catppuccin-macchiato .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-dark .navbar-menu,html.theme--catppuccin-macchiato .content kbd.hero .navbar-menu{background-color:#363a4f}}html.theme--catppuccin-macchiato .hero.is-dark .navbar-item,html.theme--catppuccin-macchiato .content kbd.hero .navbar-item,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .tabs a,html.theme--catppuccin-macchiato .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-dark .tabs a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs li.is-active a{color:#363a4f !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .hero.is-dark.is-bold,html.theme--catppuccin-macchiato .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1d2535 0%, #363a4f 71%, #3d3c62 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-macchiato .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1d2535 0%, #363a4f 71%, #3d3c62 100%)}}html.theme--catppuccin-macchiato .hero.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-primary strong,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-primary .title,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .subtitle,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-primary .subtitle strong,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-primary .navbar-menu,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#8aadf4}}html.theme--catppuccin-macchiato .hero.is-primary .navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .tabs a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-primary .tabs a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#8aadf4 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .hero.is-primary.is-bold,html.theme--catppuccin-macchiato .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-macchiato .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}}html.theme--catppuccin-macchiato .hero.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-link strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-link .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-link .navbar-menu{background-color:#8aadf4}}html.theme--catppuccin-macchiato .hero.is-link .navbar-item,html.theme--catppuccin-macchiato .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-link a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-link .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-link .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-link .tabs li.is-active a{color:#8aadf4 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .hero.is-link.is-bold{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}}html.theme--catppuccin-macchiato .hero.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-info strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-info .navbar-menu{background-color:#8bd5ca}}html.theme--catppuccin-macchiato .hero.is-info .navbar-item,html.theme--catppuccin-macchiato .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-info .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-info .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-info .tabs li.is-active a{color:#8bd5ca !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .hero.is-info.is-bold{background-image:linear-gradient(141deg, #5bd2ac 0%, #8bd5ca 71%, #9adedf 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #5bd2ac 0%, #8bd5ca 71%, #9adedf 100%)}}html.theme--catppuccin-macchiato .hero.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-success strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-success .navbar-menu{background-color:#a6da95}}html.theme--catppuccin-macchiato .hero.is-success .navbar-item,html.theme--catppuccin-macchiato .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-success .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-success .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-success .tabs li.is-active a{color:#a6da95 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .hero.is-success.is-bold{background-image:linear-gradient(141deg, #94d765 0%, #a6da95 71%, #aae4a5 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #94d765 0%, #a6da95 71%, #aae4a5 100%)}}html.theme--catppuccin-macchiato .hero.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-warning strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-warning .navbar-menu{background-color:#eed49f}}html.theme--catppuccin-macchiato .hero.is-warning .navbar-item,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-warning .tabs li.is-active a{color:#eed49f !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #efae6b 0%, #eed49f 71%, #f4e9b2 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #efae6b 0%, #eed49f 71%, #f4e9b2 100%)}}html.theme--catppuccin-macchiato .hero.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-danger strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-danger .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-danger .navbar-menu{background-color:#ed8796}}html.theme--catppuccin-macchiato .hero.is-danger .navbar-item,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-danger .tabs li.is-active a{color:#ed8796 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #f05183 0%, #ed8796 71%, #f39c9a 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f05183 0%, #ed8796 71%, #f39c9a 100%)}}html.theme--catppuccin-macchiato .hero.is-small .hero-body,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-macchiato .hero.is-halfheight .hero-body,html.theme--catppuccin-macchiato .hero.is-fullheight .hero-body,html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-macchiato .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-macchiato .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-macchiato .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-macchiato .hero-video{overflow:hidden}html.theme--catppuccin-macchiato .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-macchiato .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero-video{display:none}}html.theme--catppuccin-macchiato .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero-buttons .button{display:flex}html.theme--catppuccin-macchiato .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-macchiato .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-macchiato .hero-head,html.theme--catppuccin-macchiato .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero-body{padding:3rem 3rem}}html.theme--catppuccin-macchiato .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .section{padding:3rem 3rem}html.theme--catppuccin-macchiato .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-macchiato .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-macchiato .footer{background-color:#1e2030;padding:3rem 1.5rem 6rem}html.theme--catppuccin-macchiato h1 .docs-heading-anchor,html.theme--catppuccin-macchiato h1 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h1 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h2 .docs-heading-anchor,html.theme--catppuccin-macchiato h2 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h2 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h3 .docs-heading-anchor,html.theme--catppuccin-macchiato h3 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h3 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h4 .docs-heading-anchor,html.theme--catppuccin-macchiato h4 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h4 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h5 .docs-heading-anchor,html.theme--catppuccin-macchiato h5 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h5 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h6 .docs-heading-anchor,html.theme--catppuccin-macchiato h6 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h6 .docs-heading-anchor:visited{color:#cad3f5}html.theme--catppuccin-macchiato h1 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h2 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h3 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h4 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h5 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-macchiato h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-macchiato h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-macchiato .docs-light-only{display:none !important}html.theme--catppuccin-macchiato pre{position:relative;overflow:hidden}html.theme--catppuccin-macchiato pre code,html.theme--catppuccin-macchiato pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-macchiato pre code:first-of-type,html.theme--catppuccin-macchiato pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-macchiato pre code:last-of-type,html.theme--catppuccin-macchiato pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-macchiato pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#cad3f5;cursor:pointer;text-align:center}html.theme--catppuccin-macchiato pre .copy-button:focus,html.theme--catppuccin-macchiato pre .copy-button:hover{opacity:1;background:rgba(202,211,245,0.1);color:#8aadf4}html.theme--catppuccin-macchiato pre .copy-button.success{color:#a6da95;opacity:1}html.theme--catppuccin-macchiato pre .copy-button.error{color:#ed8796;opacity:1}html.theme--catppuccin-macchiato pre:hover .copy-button{opacity:1}html.theme--catppuccin-macchiato .admonition{background-color:#1e2030;border-style:solid;border-width:2px;border-color:#b8c0e0;border-radius:4px;font-size:1rem}html.theme--catppuccin-macchiato .admonition strong{color:currentColor}html.theme--catppuccin-macchiato .admonition.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-macchiato .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .admonition.is-default{background-color:#1e2030;border-color:#b8c0e0}html.theme--catppuccin-macchiato .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#b8c0e0}html.theme--catppuccin-macchiato .admonition.is-default>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-info{background-color:#1e2030;border-color:#8bd5ca}html.theme--catppuccin-macchiato .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#8bd5ca}html.theme--catppuccin-macchiato .admonition.is-info>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-success{background-color:#1e2030;border-color:#a6da95}html.theme--catppuccin-macchiato .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6da95}html.theme--catppuccin-macchiato .admonition.is-success>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-warning{background-color:#1e2030;border-color:#eed49f}html.theme--catppuccin-macchiato .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#eed49f}html.theme--catppuccin-macchiato .admonition.is-warning>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-danger{background-color:#1e2030;border-color:#ed8796}html.theme--catppuccin-macchiato .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#ed8796}html.theme--catppuccin-macchiato .admonition.is-danger>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-compat{background-color:#1e2030;border-color:#91d7e3}html.theme--catppuccin-macchiato .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#91d7e3}html.theme--catppuccin-macchiato .admonition.is-compat>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition-header{color:#b8c0e0;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-macchiato .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-macchiato details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-macchiato details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-macchiato details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-macchiato .admonition-body{color:#cad3f5;padding:0.5rem .75rem}html.theme--catppuccin-macchiato .admonition-body pre{background-color:#1e2030}html.theme--catppuccin-macchiato .admonition-body code{background-color:#1e2030}html.theme--catppuccin-macchiato .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #5b6078;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-macchiato .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#1e2030;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5b6078;overflow:auto}html.theme--catppuccin-macchiato .docstring>header code{background-color:transparent}html.theme--catppuccin-macchiato .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-macchiato .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-macchiato .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-macchiato .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5b6078}html.theme--catppuccin-macchiato .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-macchiato .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-macchiato .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-macchiato .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-macchiato .documenter-example-output{background-color:#24273a}html.theme--catppuccin-macchiato .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#1e2030;color:#cad3f5;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-macchiato .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-macchiato .outdated-warning-overlay a{color:#8aadf4}html.theme--catppuccin-macchiato .outdated-warning-overlay a:hover{color:#91d7e3}html.theme--catppuccin-macchiato .content pre{border:2px solid #5b6078;border-radius:4px}html.theme--catppuccin-macchiato .content code{font-weight:inherit}html.theme--catppuccin-macchiato .content a code{color:#8aadf4}html.theme--catppuccin-macchiato .content a:hover code{color:#91d7e3}html.theme--catppuccin-macchiato .content h1 code,html.theme--catppuccin-macchiato .content h2 code,html.theme--catppuccin-macchiato .content h3 code,html.theme--catppuccin-macchiato .content h4 code,html.theme--catppuccin-macchiato .content h5 code,html.theme--catppuccin-macchiato .content h6 code{color:#cad3f5}html.theme--catppuccin-macchiato .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-macchiato .content blockquote>ul:first-child,html.theme--catppuccin-macchiato .content blockquote>ol:first-child,html.theme--catppuccin-macchiato .content .admonition-body>ul:first-child,html.theme--catppuccin-macchiato .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-macchiato pre,html.theme--catppuccin-macchiato code{font-variant-ligatures:no-contextual}html.theme--catppuccin-macchiato .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-macchiato .breadcrumb a.is-disabled,html.theme--catppuccin-macchiato .breadcrumb a.is-disabled:hover{color:#b5c1f1}html.theme--catppuccin-macchiato .hljs{background:initial !important}html.theme--catppuccin-macchiato .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-macchiato .katex-display,html.theme--catppuccin-macchiato mjx-container,html.theme--catppuccin-macchiato .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-macchiato html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-macchiato li.no-marker{list-style:none}html.theme--catppuccin-macchiato #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-macchiato #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main{width:100%}html.theme--catppuccin-macchiato #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-macchiato #documenter .docs-main>header,html.theme--catppuccin-macchiato #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar{background-color:#24273a;border-bottom:1px solid #5b6078;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes{border-top:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-macchiato .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5b6078;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-macchiato #documenter .docs-sidebar{display:flex;flex-direction:column;color:#cad3f5;background-color:#1e2030;border-right:1px solid #5b6078;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-macchiato #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name a:hover{color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5b6078;display:none;padding:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5b6078;padding-bottom:1.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#cad3f5;background:#1e2030}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#cad3f5;background-color:#26283d}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5b6078;border-bottom:1px solid #5b6078;background-color:#181926}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#181926;color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#26283d;color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#2e3149}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#3d4162}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#2e3149}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#3d4162}}html.theme--catppuccin-macchiato kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-macchiato .search-min-width-50{min-width:50%}html.theme--catppuccin-macchiato .search-min-height-100{min-height:100%}html.theme--catppuccin-macchiato .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-macchiato .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover,html.theme--catppuccin-macchiato .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-macchiato .search-result-link .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-macchiato .property-search-result-badge,html.theme--catppuccin-macchiato .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-macchiato .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:hover .search-filter,html.theme--catppuccin-macchiato .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-macchiato .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-macchiato .search-filter:hover,html.theme--catppuccin-macchiato .search-filter:focus{color:#333}html.theme--catppuccin-macchiato .search-filter-selected{color:#363a4f;background-color:#b7bdf8}html.theme--catppuccin-macchiato .search-filter-selected:hover,html.theme--catppuccin-macchiato .search-filter-selected:focus{color:#363a4f}html.theme--catppuccin-macchiato .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-macchiato .search-divider{border-bottom:1px solid #5b6078}html.theme--catppuccin-macchiato .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-macchiato .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-macchiato .w-100{width:100%}html.theme--catppuccin-macchiato .gap-2{gap:0.5rem}html.theme--catppuccin-macchiato .gap-4{gap:1rem}html.theme--catppuccin-macchiato .gap-8{gap:2rem}html.theme--catppuccin-macchiato{background-color:#24273a;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-macchiato a{transition:all 200ms ease}html.theme--catppuccin-macchiato .label{color:#cad3f5}html.theme--catppuccin-macchiato .button,html.theme--catppuccin-macchiato .control.has-icons-left .icon,html.theme--catppuccin-macchiato .control.has-icons-right .icon,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .select,html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea{height:2.5em;color:#cad3f5}html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#cad3f5}html.theme--catppuccin-macchiato .select:after,html.theme--catppuccin-macchiato .select select{border-width:1px}html.theme--catppuccin-macchiato .menu-list a{transition:all 300ms ease}html.theme--catppuccin-macchiato .modal-card-foot,html.theme--catppuccin-macchiato .modal-card-head{border-color:#5b6078}html.theme--catppuccin-macchiato .navbar{border-radius:.4em}html.theme--catppuccin-macchiato .navbar.is-transparent{background:none}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .navbar .navbar-menu{background-color:#8aadf4;border-radius:0 0 .4em .4em}}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){color:#363a4f}html.theme--catppuccin-macchiato .tag.is-link:not(body),html.theme--catppuccin-macchiato .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-macchiato .content kbd.is-link:not(body){color:#363a4f}html.theme--catppuccin-macchiato .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-macchiato .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-macchiato .ansi span.sgr3{font-style:italic}html.theme--catppuccin-macchiato .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-macchiato .ansi span.sgr7{color:#24273a;background-color:#cad3f5}html.theme--catppuccin-macchiato .ansi span.sgr8{color:transparent}html.theme--catppuccin-macchiato .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-macchiato .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-macchiato .ansi span.sgr30{color:#494d64}html.theme--catppuccin-macchiato .ansi span.sgr31{color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr32{color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr33{color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr34{color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr35{color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr36{color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr37{color:#b8c0e0}html.theme--catppuccin-macchiato .ansi span.sgr40{background-color:#494d64}html.theme--catppuccin-macchiato .ansi span.sgr41{background-color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr42{background-color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr43{background-color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr44{background-color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr45{background-color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr46{background-color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr47{background-color:#b8c0e0}html.theme--catppuccin-macchiato .ansi span.sgr90{color:#5b6078}html.theme--catppuccin-macchiato .ansi span.sgr91{color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr92{color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr93{color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr94{color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr95{color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr96{color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr97{color:#a5adcb}html.theme--catppuccin-macchiato .ansi span.sgr100{background-color:#5b6078}html.theme--catppuccin-macchiato .ansi span.sgr101{background-color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr102{background-color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr103{background-color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr104{background-color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr105{background-color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr106{background-color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr107{background-color:#a5adcb}html.theme--catppuccin-macchiato code.language-julia-repl>span.hljs-meta{color:#a6da95;font-weight:bolder}html.theme--catppuccin-macchiato code .hljs{color:#cad3f5;background:#24273a}html.theme--catppuccin-macchiato code .hljs-keyword{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-built_in{color:#ed8796}html.theme--catppuccin-macchiato code .hljs-type{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-literal{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-number{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-operator{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-punctuation{color:#b8c0e0}html.theme--catppuccin-macchiato code .hljs-property{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-regexp{color:#f5bde6}html.theme--catppuccin-macchiato code .hljs-string{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-char.escape_{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-subst{color:#a5adcb}html.theme--catppuccin-macchiato code .hljs-symbol{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-variable{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-variable.language_{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-variable.constant_{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-title{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-title.class_{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-title.function_{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-params{color:#cad3f5}html.theme--catppuccin-macchiato code .hljs-comment{color:#5b6078}html.theme--catppuccin-macchiato code .hljs-doctag{color:#ed8796}html.theme--catppuccin-macchiato code .hljs-meta{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-section{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-tag{color:#a5adcb}html.theme--catppuccin-macchiato code .hljs-name{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-attr{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-attribute{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-bullet{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-code{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-emphasis{color:#ed8796;font-style:italic}html.theme--catppuccin-macchiato code .hljs-strong{color:#ed8796;font-weight:bold}html.theme--catppuccin-macchiato code .hljs-formula{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-link{color:#7dc4e4;font-style:italic}html.theme--catppuccin-macchiato code .hljs-quote{color:#a6da95;font-style:italic}html.theme--catppuccin-macchiato code .hljs-selector-tag{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-selector-id{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-selector-class{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-selector-attr{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-selector-pseudo{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-template-tag{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-template-variable{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-addition{color:#a6da95;background:rgba(166,227,161,0.15)}html.theme--catppuccin-macchiato code .hljs-deletion{color:#ed8796;background:rgba(243,139,168,0.15)}html.theme--catppuccin-macchiato .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover,html.theme--catppuccin-macchiato .search-result-link:focus{background-color:#363a4f}html.theme--catppuccin-macchiato .search-result-link .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:hover .search-filter,html.theme--catppuccin-macchiato .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:focus .search-filter{color:#363a4f !important;background-color:#b7bdf8 !important}html.theme--catppuccin-macchiato .search-result-title{color:#cad3f5}html.theme--catppuccin-macchiato .search-result-highlight{background-color:#ed8796;color:#1e2030}html.theme--catppuccin-macchiato .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-macchiato .w-100{width:100%}html.theme--catppuccin-macchiato .gap-2{gap:0.5rem}html.theme--catppuccin-macchiato .gap-4{gap:1rem} diff --git a/previews/PR306/assets/themes/catppuccin-mocha.css b/previews/PR306/assets/themes/catppuccin-mocha.css new file mode 100644 index 00000000..6f27b4c5 --- /dev/null +++ b/previews/PR306/assets/themes/catppuccin-mocha.css @@ -0,0 +1 @@ +html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-mocha .pagination-previous:focus,html.theme--catppuccin-mocha .pagination-next:focus,html.theme--catppuccin-mocha .pagination-link:focus,html.theme--catppuccin-mocha .pagination-ellipsis:focus,html.theme--catppuccin-mocha .file-cta:focus,html.theme--catppuccin-mocha .file-name:focus,html.theme--catppuccin-mocha .select select:focus,html.theme--catppuccin-mocha .textarea:focus,html.theme--catppuccin-mocha .input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-mocha .button:focus,html.theme--catppuccin-mocha .is-focused.pagination-previous,html.theme--catppuccin-mocha .is-focused.pagination-next,html.theme--catppuccin-mocha .is-focused.pagination-link,html.theme--catppuccin-mocha .is-focused.pagination-ellipsis,html.theme--catppuccin-mocha .is-focused.file-cta,html.theme--catppuccin-mocha .is-focused.file-name,html.theme--catppuccin-mocha .select select.is-focused,html.theme--catppuccin-mocha .is-focused.textarea,html.theme--catppuccin-mocha .is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-focused.button,html.theme--catppuccin-mocha .pagination-previous:active,html.theme--catppuccin-mocha .pagination-next:active,html.theme--catppuccin-mocha .pagination-link:active,html.theme--catppuccin-mocha .pagination-ellipsis:active,html.theme--catppuccin-mocha .file-cta:active,html.theme--catppuccin-mocha .file-name:active,html.theme--catppuccin-mocha .select select:active,html.theme--catppuccin-mocha .textarea:active,html.theme--catppuccin-mocha .input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-mocha .button:active,html.theme--catppuccin-mocha .is-active.pagination-previous,html.theme--catppuccin-mocha .is-active.pagination-next,html.theme--catppuccin-mocha .is-active.pagination-link,html.theme--catppuccin-mocha .is-active.pagination-ellipsis,html.theme--catppuccin-mocha .is-active.file-cta,html.theme--catppuccin-mocha .is-active.file-name,html.theme--catppuccin-mocha .select select.is-active,html.theme--catppuccin-mocha .is-active.textarea,html.theme--catppuccin-mocha .is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .is-active.button{outline:none}html.theme--catppuccin-mocha .pagination-previous[disabled],html.theme--catppuccin-mocha .pagination-next[disabled],html.theme--catppuccin-mocha .pagination-link[disabled],html.theme--catppuccin-mocha .pagination-ellipsis[disabled],html.theme--catppuccin-mocha .file-cta[disabled],html.theme--catppuccin-mocha .file-name[disabled],html.theme--catppuccin-mocha .select select[disabled],html.theme--catppuccin-mocha .textarea[disabled],html.theme--catppuccin-mocha .input[disabled],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-mocha .button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-mocha .select select,fieldset[disabled] html.theme--catppuccin-mocha .textarea,fieldset[disabled] html.theme--catppuccin-mocha .input,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha fieldset[disabled] .select select,html.theme--catppuccin-mocha .select fieldset[disabled] select,html.theme--catppuccin-mocha fieldset[disabled] .textarea,html.theme--catppuccin-mocha fieldset[disabled] .input,html.theme--catppuccin-mocha fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-mocha .button,html.theme--catppuccin-mocha fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-mocha .tabs,html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .breadcrumb,html.theme--catppuccin-mocha .file,html.theme--catppuccin-mocha .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-mocha .admonition:not(:last-child),html.theme--catppuccin-mocha .tabs:not(:last-child),html.theme--catppuccin-mocha .pagination:not(:last-child),html.theme--catppuccin-mocha .message:not(:last-child),html.theme--catppuccin-mocha .level:not(:last-child),html.theme--catppuccin-mocha .breadcrumb:not(:last-child),html.theme--catppuccin-mocha .block:not(:last-child),html.theme--catppuccin-mocha .title:not(:last-child),html.theme--catppuccin-mocha .subtitle:not(:last-child),html.theme--catppuccin-mocha .table-container:not(:last-child),html.theme--catppuccin-mocha .table:not(:last-child),html.theme--catppuccin-mocha .progress:not(:last-child),html.theme--catppuccin-mocha .notification:not(:last-child),html.theme--catppuccin-mocha .content:not(:last-child),html.theme--catppuccin-mocha .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .modal-close,html.theme--catppuccin-mocha .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-mocha .modal-close::before,html.theme--catppuccin-mocha .delete::before,html.theme--catppuccin-mocha .modal-close::after,html.theme--catppuccin-mocha .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-mocha .modal-close::before,html.theme--catppuccin-mocha .delete::before{height:2px;width:50%}html.theme--catppuccin-mocha .modal-close::after,html.theme--catppuccin-mocha .delete::after{height:50%;width:2px}html.theme--catppuccin-mocha .modal-close:hover,html.theme--catppuccin-mocha .delete:hover,html.theme--catppuccin-mocha .modal-close:focus,html.theme--catppuccin-mocha .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-mocha .modal-close:active,html.theme--catppuccin-mocha .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-mocha .is-small.modal-close,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-mocha .is-small.delete,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-mocha .is-medium.modal-close,html.theme--catppuccin-mocha .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-mocha .is-large.modal-close,html.theme--catppuccin-mocha .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-mocha .control.is-loading::after,html.theme--catppuccin-mocha .select.is-loading::after,html.theme--catppuccin-mocha .loader,html.theme--catppuccin-mocha .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #7f849c;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-mocha .hero-video,html.theme--catppuccin-mocha .modal-background,html.theme--catppuccin-mocha .modal,html.theme--catppuccin-mocha .image.is-square img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-mocha .image.is-square .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-mocha .image.is-1by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-mocha .image.is-1by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-mocha .image.is-5by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-mocha .image.is-5by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-mocha .image.is-4by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-mocha .image.is-4by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-mocha .image.is-3by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-mocha .image.is-5by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-mocha .image.is-5by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-mocha .image.is-16by9 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-mocha .image.is-16by9 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-mocha .image.is-2by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-mocha .image.is-2by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-mocha .image.is-3by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-mocha .image.is-3by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-mocha .image.is-4by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-mocha .image.is-4by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-mocha .image.is-3by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-mocha .image.is-3by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-mocha .image.is-2by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-mocha .image.is-2by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-mocha .image.is-3by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-mocha .image.is-9by16 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-mocha .image.is-9by16 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-mocha .image.is-1by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-mocha .image.is-1by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-mocha .image.is-1by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-mocha .image.is-1by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-mocha .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#313244 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c26 !important}.has-background-dark{background-color:#313244 !important}.has-text-primary{color:#89b4fa !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#5895f8 !important}.has-background-primary{background-color:#89b4fa !important}.has-text-primary-light{color:#ebf3fe !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bbd3fc !important}.has-background-primary-light{background-color:#ebf3fe !important}.has-text-primary-dark{color:#063c93 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#0850c4 !important}.has-background-primary-dark{background-color:#063c93 !important}.has-text-link{color:#89b4fa !important}a.has-text-link:hover,a.has-text-link:focus{color:#5895f8 !important}.has-background-link{background-color:#89b4fa !important}.has-text-link-light{color:#ebf3fe !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bbd3fc !important}.has-background-link-light{background-color:#ebf3fe !important}.has-text-link-dark{color:#063c93 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#0850c4 !important}.has-background-link-dark{background-color:#063c93 !important}.has-text-info{color:#94e2d5 !important}a.has-text-info:hover,a.has-text-info:focus{color:#6cd7c5 !important}.has-background-info{background-color:#94e2d5 !important}.has-text-info-light{color:#effbf9 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c7f0e9 !important}.has-background-info-light{background-color:#effbf9 !important}.has-text-info-dark{color:#207466 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#2a9c89 !important}.has-background-info-dark{background-color:#207466 !important}.has-text-success{color:#a6e3a1 !important}a.has-text-success:hover,a.has-text-success:focus{color:#81d77a !important}.has-background-success{background-color:#a6e3a1 !important}.has-text-success-light{color:#f0faef !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#cbefc8 !important}.has-background-success-light{background-color:#f0faef !important}.has-text-success-dark{color:#287222 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#36992e !important}.has-background-success-dark{background-color:#287222 !important}.has-text-warning{color:#f9e2af !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#f5d180 !important}.has-background-warning{background-color:#f9e2af !important}.has-text-warning-light{color:#fef8ec !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fae7bd !important}.has-background-warning-light{background-color:#fef8ec !important}.has-text-warning-dark{color:#8a620a !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#b9840e !important}.has-background-warning-dark{background-color:#8a620a !important}.has-text-danger{color:#f38ba8 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#ee5d85 !important}.has-background-danger{background-color:#f38ba8 !important}.has-text-danger-light{color:#fdedf1 !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f8bece !important}.has-background-danger-light{background-color:#fdedf1 !important}.has-text-danger-dark{color:#991036 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c71546 !important}.has-background-danger-dark{background-color:#991036 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#313244 !important}.has-background-grey-darker{background-color:#313244 !important}.has-text-grey-dark{color:#45475a !important}.has-background-grey-dark{background-color:#45475a !important}.has-text-grey{color:#585b70 !important}.has-background-grey{background-color:#585b70 !important}.has-text-grey-light{color:#6c7086 !important}.has-background-grey-light{background-color:#6c7086 !important}.has-text-grey-lighter{color:#7f849c !important}.has-background-grey-lighter{background-color:#7f849c !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--catppuccin-mocha html{background-color:#1e1e2e;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-mocha article,html.theme--catppuccin-mocha aside,html.theme--catppuccin-mocha figure,html.theme--catppuccin-mocha footer,html.theme--catppuccin-mocha header,html.theme--catppuccin-mocha hgroup,html.theme--catppuccin-mocha section{display:block}html.theme--catppuccin-mocha body,html.theme--catppuccin-mocha button,html.theme--catppuccin-mocha input,html.theme--catppuccin-mocha optgroup,html.theme--catppuccin-mocha select,html.theme--catppuccin-mocha textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-mocha code,html.theme--catppuccin-mocha pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-mocha body{color:#cdd6f4;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-mocha a{color:#89b4fa;cursor:pointer;text-decoration:none}html.theme--catppuccin-mocha a strong{color:currentColor}html.theme--catppuccin-mocha a:hover{color:#89dceb}html.theme--catppuccin-mocha code{background-color:#181825;color:#cdd6f4;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-mocha hr{background-color:#181825;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-mocha img{height:auto;max-width:100%}html.theme--catppuccin-mocha input[type="checkbox"],html.theme--catppuccin-mocha input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-mocha small{font-size:.875em}html.theme--catppuccin-mocha span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-mocha strong{color:#b8c5ef;font-weight:700}html.theme--catppuccin-mocha fieldset{border:none}html.theme--catppuccin-mocha pre{-webkit-overflow-scrolling:touch;background-color:#181825;color:#cdd6f4;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-mocha pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-mocha table td,html.theme--catppuccin-mocha table th{vertical-align:top}html.theme--catppuccin-mocha table td:not([align]),html.theme--catppuccin-mocha table th:not([align]){text-align:inherit}html.theme--catppuccin-mocha table th{color:#b8c5ef}html.theme--catppuccin-mocha .box{background-color:#45475a;border-radius:8px;box-shadow:none;color:#cdd6f4;display:block;padding:1.25rem}html.theme--catppuccin-mocha a.box:hover,html.theme--catppuccin-mocha a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #89b4fa}html.theme--catppuccin-mocha a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #89b4fa}html.theme--catppuccin-mocha .button{background-color:#181825;border-color:#363653;border-width:1px;color:#89b4fa;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-mocha .button strong{color:inherit}html.theme--catppuccin-mocha .button .icon,html.theme--catppuccin-mocha .button .icon.is-small,html.theme--catppuccin-mocha .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-mocha .button .icon.is-medium,html.theme--catppuccin-mocha .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-mocha .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-mocha .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-mocha .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-mocha .button:hover,html.theme--catppuccin-mocha .button.is-hovered{border-color:#6c7086;color:#b8c5ef}html.theme--catppuccin-mocha .button:focus,html.theme--catppuccin-mocha .button.is-focused{border-color:#6c7086;color:#71a4f9}html.theme--catppuccin-mocha .button:focus:not(:active),html.theme--catppuccin-mocha .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button:active,html.theme--catppuccin-mocha .button.is-active{border-color:#45475a;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text{background-color:transparent;border-color:transparent;color:#cdd6f4;text-decoration:underline}html.theme--catppuccin-mocha .button.is-text:hover,html.theme--catppuccin-mocha .button.is-text.is-hovered,html.theme--catppuccin-mocha .button.is-text:focus,html.theme--catppuccin-mocha .button.is-text.is-focused{background-color:#181825;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text:active,html.theme--catppuccin-mocha .button.is-text.is-active{background-color:#0e0e16;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-mocha .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#89b4fa;text-decoration:none}html.theme--catppuccin-mocha .button.is-ghost:hover,html.theme--catppuccin-mocha .button.is-ghost.is-hovered{color:#89b4fa;text-decoration:underline}html.theme--catppuccin-mocha .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:hover,html.theme--catppuccin-mocha .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:focus,html.theme--catppuccin-mocha .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:focus:not(:active),html.theme--catppuccin-mocha .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .button.is-white:active,html.theme--catppuccin-mocha .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-mocha .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted:hover,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-mocha .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-outlined:hover,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-white.is-outlined:focus,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:hover,html.theme--catppuccin-mocha .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:focus,html.theme--catppuccin-mocha .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:focus:not(:active),html.theme--catppuccin-mocha .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .button.is-black:active,html.theme--catppuccin-mocha .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-mocha .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted:hover,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-outlined:hover,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-black.is-outlined:focus,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:hover,html.theme--catppuccin-mocha .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:focus,html.theme--catppuccin-mocha .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:focus:not(:active),html.theme--catppuccin-mocha .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .button.is-light:active,html.theme--catppuccin-mocha .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-mocha .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted:hover,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-outlined:hover,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-light.is-outlined:focus,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-dark,html.theme--catppuccin-mocha .content kbd.button{background-color:#313244;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:hover,html.theme--catppuccin-mocha .content kbd.button:hover,html.theme--catppuccin-mocha .button.is-dark.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-hovered{background-color:#2c2d3d;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:focus,html.theme--catppuccin-mocha .content kbd.button:focus,html.theme--catppuccin-mocha .button.is-dark.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:focus:not(:active),html.theme--catppuccin-mocha .content kbd.button:focus:not(:active),html.theme--catppuccin-mocha .button.is-dark.is-focused:not(:active),html.theme--catppuccin-mocha .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .button.is-dark:active,html.theme--catppuccin-mocha .content kbd.button:active,html.theme--catppuccin-mocha .button.is-dark.is-active,html.theme--catppuccin-mocha .content kbd.button.is-active{background-color:#262735;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark[disabled],html.theme--catppuccin-mocha .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button{background-color:#313244;border-color:#313244;box-shadow:none}html.theme--catppuccin-mocha .button.is-dark.is-inverted,html.theme--catppuccin-mocha .content kbd.button.is-inverted{background-color:#fff;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted:hover,html.theme--catppuccin-mocha .content kbd.button.is-inverted:hover,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-dark.is-inverted[disabled],html.theme--catppuccin-mocha .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-loading::after,html.theme--catppuccin-mocha .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined,html.theme--catppuccin-mocha .content kbd.button.is-outlined{background-color:transparent;border-color:#313244;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-outlined:hover,html.theme--catppuccin-mocha .content kbd.button.is-outlined:hover,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-dark.is-outlined:focus,html.theme--catppuccin-mocha .content kbd.button.is-outlined:focus,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-focused{background-color:#313244;border-color:#313244;color:#fff}html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #313244 #313244 !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined[disabled],html.theme--catppuccin-mocha .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-outlined{background-color:transparent;border-color:#313244;box-shadow:none;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #313244 #313244 !important}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-primary,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:hover,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:focus,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:focus:not(:active),html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-mocha .button.is-primary.is-focused:not(:active),html.theme--catppuccin-mocha .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button.is-primary:active,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-mocha .button.is-primary.is-active,html.theme--catppuccin-mocha .docstring>section>a.button.is-active.docs-sourcelink{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink{background-color:#89b4fa;border-color:#89b4fa;box-shadow:none}html.theme--catppuccin-mocha .button.is-primary.is-inverted,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-primary.is-inverted[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-loading::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-outlined:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-mocha .button.is-primary.is-outlined:focus,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#89b4fa;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-light,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .button.is-primary.is-light:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-light.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#dfebfe;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-primary.is-light:active,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-mocha .button.is-primary.is-light.is-active,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d3e3fd;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-link{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:hover,html.theme--catppuccin-mocha .button.is-link.is-hovered{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:focus,html.theme--catppuccin-mocha .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:focus:not(:active),html.theme--catppuccin-mocha .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button.is-link:active,html.theme--catppuccin-mocha .button.is-link.is-active{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link{background-color:#89b4fa;border-color:#89b4fa;box-shadow:none}html.theme--catppuccin-mocha .button.is-link.is-inverted{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted:hover,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-link.is-outlined{background-color:transparent;border-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-outlined:hover,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-link.is-outlined:focus,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-focused{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-outlined{background-color:transparent;border-color:#89b4fa;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-light{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .button.is-link.is-light:hover,html.theme--catppuccin-mocha .button.is-link.is-light.is-hovered{background-color:#dfebfe;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-link.is-light:active,html.theme--catppuccin-mocha .button.is-link.is-light.is-active{background-color:#d3e3fd;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-info{background-color:#94e2d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:hover,html.theme--catppuccin-mocha .button.is-info.is-hovered{background-color:#8adfd1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:focus,html.theme--catppuccin-mocha .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:focus:not(:active),html.theme--catppuccin-mocha .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .button.is-info:active,html.theme--catppuccin-mocha .button.is-info.is-active{background-color:#80ddcd;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info{background-color:#94e2d5;border-color:#94e2d5;box-shadow:none}html.theme--catppuccin-mocha .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted:hover,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-info.is-outlined{background-color:transparent;border-color:#94e2d5;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-outlined:hover,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-info.is-outlined:focus,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-focused{background-color:#94e2d5;border-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #94e2d5 #94e2d5 !important}html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-outlined{background-color:transparent;border-color:#94e2d5;box-shadow:none;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #94e2d5 #94e2d5 !important}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-light{background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .button.is-info.is-light:hover,html.theme--catppuccin-mocha .button.is-info.is-light.is-hovered{background-color:#e5f8f5;border-color:transparent;color:#207466}html.theme--catppuccin-mocha .button.is-info.is-light:active,html.theme--catppuccin-mocha .button.is-info.is-light.is-active{background-color:#dbf5f1;border-color:transparent;color:#207466}html.theme--catppuccin-mocha .button.is-success{background-color:#a6e3a1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:hover,html.theme--catppuccin-mocha .button.is-success.is-hovered{background-color:#9de097;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:focus,html.theme--catppuccin-mocha .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:focus:not(:active),html.theme--catppuccin-mocha .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .button.is-success:active,html.theme--catppuccin-mocha .button.is-success.is-active{background-color:#93dd8d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success{background-color:#a6e3a1;border-color:#a6e3a1;box-shadow:none}html.theme--catppuccin-mocha .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted:hover,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-success.is-outlined{background-color:transparent;border-color:#a6e3a1;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-outlined:hover,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-success.is-outlined:focus,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-focused{background-color:#a6e3a1;border-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6e3a1 #a6e3a1 !important}html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-outlined{background-color:transparent;border-color:#a6e3a1;box-shadow:none;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6e3a1 #a6e3a1 !important}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-light{background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .button.is-success.is-light:hover,html.theme--catppuccin-mocha .button.is-success.is-light.is-hovered{background-color:#e7f7e5;border-color:transparent;color:#287222}html.theme--catppuccin-mocha .button.is-success.is-light:active,html.theme--catppuccin-mocha .button.is-success.is-light.is-active{background-color:#def4dc;border-color:transparent;color:#287222}html.theme--catppuccin-mocha .button.is-warning{background-color:#f9e2af;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:hover,html.theme--catppuccin-mocha .button.is-warning.is-hovered{background-color:#f8dea3;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:focus,html.theme--catppuccin-mocha .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:focus:not(:active),html.theme--catppuccin-mocha .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .button.is-warning:active,html.theme--catppuccin-mocha .button.is-warning.is-active{background-color:#f7d997;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning{background-color:#f9e2af;border-color:#f9e2af;box-shadow:none}html.theme--catppuccin-mocha .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted:hover,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined{background-color:transparent;border-color:#f9e2af;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-outlined:hover,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-warning.is-outlined:focus,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-focused{background-color:#f9e2af;border-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #f9e2af #f9e2af !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-outlined{background-color:transparent;border-color:#f9e2af;box-shadow:none;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f9e2af #f9e2af !important}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-light{background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .button.is-warning.is-light:hover,html.theme--catppuccin-mocha .button.is-warning.is-light.is-hovered{background-color:#fdf4e0;border-color:transparent;color:#8a620a}html.theme--catppuccin-mocha .button.is-warning.is-light:active,html.theme--catppuccin-mocha .button.is-warning.is-light.is-active{background-color:#fcf0d4;border-color:transparent;color:#8a620a}html.theme--catppuccin-mocha .button.is-danger{background-color:#f38ba8;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:hover,html.theme--catppuccin-mocha .button.is-danger.is-hovered{background-color:#f27f9f;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:focus,html.theme--catppuccin-mocha .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:focus:not(:active),html.theme--catppuccin-mocha .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .button.is-danger:active,html.theme--catppuccin-mocha .button.is-danger.is-active{background-color:#f17497;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger{background-color:#f38ba8;border-color:#f38ba8;box-shadow:none}html.theme--catppuccin-mocha .button.is-danger.is-inverted{background-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted:hover,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined{background-color:transparent;border-color:#f38ba8;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-outlined:hover,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-danger.is-outlined:focus,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-focused{background-color:#f38ba8;border-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f38ba8 #f38ba8 !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-outlined{background-color:transparent;border-color:#f38ba8;box-shadow:none;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f38ba8 #f38ba8 !important}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-light{background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .button.is-danger.is-light:hover,html.theme--catppuccin-mocha .button.is-danger.is-light.is-hovered{background-color:#fce1e8;border-color:transparent;color:#991036}html.theme--catppuccin-mocha .button.is-danger.is-light:active,html.theme--catppuccin-mocha .button.is-danger.is-light.is-active{background-color:#fbd5e0;border-color:transparent;color:#991036}html.theme--catppuccin-mocha .button.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-mocha .button.is-small:not(.is-rounded),html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-mocha .button.is-normal{font-size:1rem}html.theme--catppuccin-mocha .button.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .button.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button{background-color:#6c7086;border-color:#585b70;box-shadow:none;opacity:.5}html.theme--catppuccin-mocha .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-mocha .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-mocha .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-mocha .button.is-static{background-color:#181825;border-color:#585b70;color:#7f849c;box-shadow:none;pointer-events:none}html.theme--catppuccin-mocha .button.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-mocha .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-mocha .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-mocha .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-mocha .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-mocha .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-mocha .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-mocha .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-mocha .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-mocha .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-mocha .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-mocha .buttons.has-addons .button:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-mocha .buttons.has-addons .button:focus,html.theme--catppuccin-mocha .buttons.has-addons .button.is-focused,html.theme--catppuccin-mocha .buttons.has-addons .button:active,html.theme--catppuccin-mocha .buttons.has-addons .button.is-active,html.theme--catppuccin-mocha .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-mocha .buttons.has-addons .button:focus:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-mocha .buttons.has-addons .button:active:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-mocha .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .buttons.is-centered{justify-content:center}html.theme--catppuccin-mocha .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-mocha .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .button.is-responsive.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-mocha .button.is-responsive,html.theme--catppuccin-mocha .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-mocha .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-mocha .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .button.is-responsive.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-mocha .button.is-responsive,html.theme--catppuccin-mocha .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-mocha .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-mocha .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-mocha .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-mocha .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-mocha .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-mocha .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-mocha .content li+li{margin-top:0.25em}html.theme--catppuccin-mocha .content p:not(:last-child),html.theme--catppuccin-mocha .content dl:not(:last-child),html.theme--catppuccin-mocha .content ol:not(:last-child),html.theme--catppuccin-mocha .content ul:not(:last-child),html.theme--catppuccin-mocha .content blockquote:not(:last-child),html.theme--catppuccin-mocha .content pre:not(:last-child),html.theme--catppuccin-mocha .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-mocha .content h1,html.theme--catppuccin-mocha .content h2,html.theme--catppuccin-mocha .content h3,html.theme--catppuccin-mocha .content h4,html.theme--catppuccin-mocha .content h5,html.theme--catppuccin-mocha .content h6{color:#cdd6f4;font-weight:600;line-height:1.125}html.theme--catppuccin-mocha .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-mocha .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-mocha .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-mocha .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-mocha .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-mocha .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-mocha .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-mocha .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-mocha .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-mocha .content blockquote{background-color:#181825;border-left:5px solid #585b70;padding:1.25em 1.5em}html.theme--catppuccin-mocha .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-mocha .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-mocha .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-mocha .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-mocha .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-mocha .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-mocha .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-mocha .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-mocha .content ul ul ul{list-style-type:square}html.theme--catppuccin-mocha .content dd{margin-left:2em}html.theme--catppuccin-mocha .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-mocha .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-mocha .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-mocha .content figure img{display:inline-block}html.theme--catppuccin-mocha .content figure figcaption{font-style:italic}html.theme--catppuccin-mocha .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-mocha .content sup,html.theme--catppuccin-mocha .content sub{font-size:75%}html.theme--catppuccin-mocha .content table{width:100%}html.theme--catppuccin-mocha .content table td,html.theme--catppuccin-mocha .content table th{border:1px solid #585b70;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-mocha .content table th{color:#b8c5ef}html.theme--catppuccin-mocha .content table th:not([align]){text-align:inherit}html.theme--catppuccin-mocha .content table thead td,html.theme--catppuccin-mocha .content table thead th{border-width:0 0 2px;color:#b8c5ef}html.theme--catppuccin-mocha .content table tfoot td,html.theme--catppuccin-mocha .content table tfoot th{border-width:2px 0 0;color:#b8c5ef}html.theme--catppuccin-mocha .content table tbody tr:last-child td,html.theme--catppuccin-mocha .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-mocha .content .tabs li+li{margin-top:0}html.theme--catppuccin-mocha .content.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-mocha .content.is-normal{font-size:1rem}html.theme--catppuccin-mocha .content.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .content.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-mocha .icon.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-mocha .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-mocha .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-mocha .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-mocha .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-mocha .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-mocha div.icon-text{display:flex}html.theme--catppuccin-mocha .image,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-mocha .image img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-mocha .image img.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-mocha .image.is-fullwidth,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-mocha .image.is-square img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-mocha .image.is-square .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-mocha .image.is-1by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-mocha .image.is-1by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-mocha .image.is-5by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-mocha .image.is-5by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-mocha .image.is-4by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-mocha .image.is-4by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-mocha .image.is-3by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-mocha .image.is-5by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-mocha .image.is-5by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-mocha .image.is-16by9 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-mocha .image.is-16by9 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-mocha .image.is-2by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-mocha .image.is-2by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-mocha .image.is-3by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-mocha .image.is-3by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-mocha .image.is-4by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-mocha .image.is-4by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-mocha .image.is-3by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-mocha .image.is-3by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-mocha .image.is-2by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-mocha .image.is-2by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-mocha .image.is-3by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-mocha .image.is-9by16 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-mocha .image.is-9by16 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-mocha .image.is-1by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-mocha .image.is-1by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-mocha .image.is-1by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-mocha .image.is-1by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-mocha .image.is-square,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-mocha .image.is-1by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-mocha .image.is-5by4,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-mocha .image.is-4by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-mocha .image.is-3by2,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-mocha .image.is-5by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-mocha .image.is-16by9,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-mocha .image.is-2by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-mocha .image.is-3by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-mocha .image.is-4by5,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-mocha .image.is-3by4,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-mocha .image.is-2by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-mocha .image.is-3by5,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-mocha .image.is-9by16,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-mocha .image.is-1by2,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-mocha .image.is-1by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-mocha .image.is-16x16,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-mocha .image.is-24x24,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-mocha .image.is-32x32,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-mocha .image.is-48x48,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-mocha .image.is-64x64,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-mocha .image.is-96x96,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-mocha .image.is-128x128,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-mocha .notification{background-color:#181825;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-mocha .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-mocha .notification strong{color:currentColor}html.theme--catppuccin-mocha .notification code,html.theme--catppuccin-mocha .notification pre{background:#fff}html.theme--catppuccin-mocha .notification pre code{background:transparent}html.theme--catppuccin-mocha .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-mocha .notification .title,html.theme--catppuccin-mocha .notification .subtitle,html.theme--catppuccin-mocha .notification .content{color:currentColor}html.theme--catppuccin-mocha .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-dark,html.theme--catppuccin-mocha .content kbd.notification{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .notification.is-primary,html.theme--catppuccin-mocha .docstring>section>a.notification.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .notification.is-primary.is-light,html.theme--catppuccin-mocha .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .notification.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .notification.is-link.is-light{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .notification.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-info.is-light{background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .notification.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-success.is-light{background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .notification.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-warning.is-light{background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .notification.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .notification.is-danger.is-light{background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-mocha .progress::-webkit-progress-bar{background-color:#45475a}html.theme--catppuccin-mocha .progress::-webkit-progress-value{background-color:#7f849c}html.theme--catppuccin-mocha .progress::-moz-progress-bar{background-color:#7f849c}html.theme--catppuccin-mocha .progress::-ms-fill{background-color:#7f849c;border:none}html.theme--catppuccin-mocha .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-mocha .content kbd.progress::-webkit-progress-value{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-mocha .content kbd.progress::-moz-progress-bar{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark::-ms-fill,html.theme--catppuccin-mocha .content kbd.progress::-ms-fill{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark:indeterminate,html.theme--catppuccin-mocha .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #313244 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary::-ms-fill,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary:indeterminate,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #89b4fa 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-link::-webkit-progress-value{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link::-moz-progress-bar{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link::-ms-fill{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link:indeterminate{background-image:linear-gradient(to right, #89b4fa 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-info::-webkit-progress-value{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info::-moz-progress-bar{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info::-ms-fill{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info:indeterminate{background-image:linear-gradient(to right, #94e2d5 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-success::-webkit-progress-value{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success::-moz-progress-bar{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success::-ms-fill{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6e3a1 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-warning::-webkit-progress-value{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning::-moz-progress-bar{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning::-ms-fill{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #f9e2af 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-danger::-webkit-progress-value{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger::-moz-progress-bar{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger::-ms-fill{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #f38ba8 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#45475a;background-image:linear-gradient(to right, #cdd6f4 30%, #45475a 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-mocha .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-mocha .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-mocha .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-mocha .progress.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-mocha .progress.is-medium{height:1.25rem}html.theme--catppuccin-mocha .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-mocha .table{background-color:#45475a;color:#cdd6f4}html.theme--catppuccin-mocha .table td,html.theme--catppuccin-mocha .table th{border:1px solid #585b70;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-mocha .table td.is-white,html.theme--catppuccin-mocha .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .table td.is-black,html.theme--catppuccin-mocha .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .table td.is-light,html.theme--catppuccin-mocha .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-dark,html.theme--catppuccin-mocha .table th.is-dark{background-color:#313244;border-color:#313244;color:#fff}html.theme--catppuccin-mocha .table td.is-primary,html.theme--catppuccin-mocha .table th.is-primary{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-link,html.theme--catppuccin-mocha .table th.is-link{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-info,html.theme--catppuccin-mocha .table th.is-info{background-color:#94e2d5;border-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-success,html.theme--catppuccin-mocha .table th.is-success{background-color:#a6e3a1;border-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-warning,html.theme--catppuccin-mocha .table th.is-warning{background-color:#f9e2af;border-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-danger,html.theme--catppuccin-mocha .table th.is-danger{background-color:#f38ba8;border-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .table td.is-narrow,html.theme--catppuccin-mocha .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-mocha .table td.is-selected,html.theme--catppuccin-mocha .table th.is-selected{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-selected a,html.theme--catppuccin-mocha .table td.is-selected strong,html.theme--catppuccin-mocha .table th.is-selected a,html.theme--catppuccin-mocha .table th.is-selected strong{color:currentColor}html.theme--catppuccin-mocha .table td.is-vcentered,html.theme--catppuccin-mocha .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-mocha .table th{color:#b8c5ef}html.theme--catppuccin-mocha .table th:not([align]){text-align:left}html.theme--catppuccin-mocha .table tr.is-selected{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table tr.is-selected a,html.theme--catppuccin-mocha .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-mocha .table tr.is-selected td,html.theme--catppuccin-mocha .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-mocha .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table thead td,html.theme--catppuccin-mocha .table thead th{border-width:0 0 2px;color:#b8c5ef}html.theme--catppuccin-mocha .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table tfoot td,html.theme--catppuccin-mocha .table tfoot th{border-width:2px 0 0;color:#b8c5ef}html.theme--catppuccin-mocha .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table tbody tr:last-child td,html.theme--catppuccin-mocha .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-mocha .table.is-bordered td,html.theme--catppuccin-mocha .table.is-bordered th{border-width:1px}html.theme--catppuccin-mocha .table.is-bordered tr:last-child td,html.theme--catppuccin-mocha .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-mocha .table.is-fullwidth{width:100%}html.theme--catppuccin-mocha .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#313244}html.theme--catppuccin-mocha .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#313244}html.theme--catppuccin-mocha .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#35364a}html.theme--catppuccin-mocha .table.is-narrow td,html.theme--catppuccin-mocha .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-mocha .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#313244}html.theme--catppuccin-mocha .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-mocha .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .tags .tag,html.theme--catppuccin-mocha .tags .content kbd,html.theme--catppuccin-mocha .content .tags kbd,html.theme--catppuccin-mocha .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-mocha .tags .tag:not(:last-child),html.theme--catppuccin-mocha .tags .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags kbd:not(:last-child),html.theme--catppuccin-mocha .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-mocha .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-mocha .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-mocha .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-mocha .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-mocha .tags.is-centered{justify-content:center}html.theme--catppuccin-mocha .tags.is-centered .tag,html.theme--catppuccin-mocha .tags.is-centered .content kbd,html.theme--catppuccin-mocha .content .tags.is-centered kbd,html.theme--catppuccin-mocha .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-mocha .tags.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .tags.is-right .tag:not(:first-child),html.theme--catppuccin-mocha .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-mocha .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-mocha .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-mocha .tags.is-right .tag:not(:last-child),html.theme--catppuccin-mocha .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-mocha .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-mocha .tags.has-addons .tag,html.theme--catppuccin-mocha .tags.has-addons .content kbd,html.theme--catppuccin-mocha .content .tags.has-addons kbd,html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-mocha .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-mocha .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-mocha .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-mocha .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-mocha .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-mocha .tag:not(body),html.theme--catppuccin-mocha .content kbd:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#181825;border-radius:.4em;color:#cdd6f4;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-mocha .tag:not(body) .delete,html.theme--catppuccin-mocha .content kbd:not(body) .delete,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-mocha .tag.is-white:not(body),html.theme--catppuccin-mocha .content kbd.is-white:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .tag.is-black:not(body),html.theme--catppuccin-mocha .content kbd.is-black:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .tag.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-dark:not(body),html.theme--catppuccin-mocha .content kbd:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-mocha .content .docstring>section>kbd:not(body){background-color:#313244;color:#fff}html.theme--catppuccin-mocha .tag.is-primary:not(body),html.theme--catppuccin-mocha .content kbd.is-primary:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .tag.is-primary.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .tag.is-link:not(body),html.theme--catppuccin-mocha .content kbd.is-link:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .tag.is-link.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-link.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .tag.is-info:not(body),html.theme--catppuccin-mocha .content kbd.is-info:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-info.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-info.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .tag.is-success:not(body),html.theme--catppuccin-mocha .content kbd.is-success:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-success.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-success.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .tag.is-warning:not(body),html.theme--catppuccin-mocha .content kbd.is-warning:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-warning.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .tag.is-danger:not(body),html.theme--catppuccin-mocha .content kbd.is-danger:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .tag.is-danger.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .tag.is-normal:not(body),html.theme--catppuccin-mocha .content kbd.is-normal:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-mocha .tag.is-medium:not(body),html.theme--catppuccin-mocha .content kbd.is-medium:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-mocha .tag.is-large:not(body),html.theme--catppuccin-mocha .content kbd.is-large:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-mocha .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-mocha .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-mocha .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-mocha .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-mocha .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-mocha .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-mocha .tag.is-delete:not(body),html.theme--catppuccin-mocha .content kbd.is-delete:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-mocha .tag.is-delete:not(body)::before,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::before,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-mocha .tag.is-delete:not(body)::after,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::after,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-mocha .tag.is-delete:not(body)::before,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::before,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-mocha .tag.is-delete:not(body)::after,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::after,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-mocha .tag.is-delete:not(body):hover,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):hover,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-mocha .tag.is-delete:not(body):focus,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):focus,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#0e0e16}html.theme--catppuccin-mocha .tag.is-delete:not(body):active,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):active,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#040406}html.theme--catppuccin-mocha .tag.is-rounded:not(body),html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-mocha .content kbd.is-rounded:not(body),html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-mocha a.tag:hover,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-mocha .title,html.theme--catppuccin-mocha .subtitle{word-break:break-word}html.theme--catppuccin-mocha .title em,html.theme--catppuccin-mocha .title span,html.theme--catppuccin-mocha .subtitle em,html.theme--catppuccin-mocha .subtitle span{font-weight:inherit}html.theme--catppuccin-mocha .title sub,html.theme--catppuccin-mocha .subtitle sub{font-size:.75em}html.theme--catppuccin-mocha .title sup,html.theme--catppuccin-mocha .subtitle sup{font-size:.75em}html.theme--catppuccin-mocha .title .tag,html.theme--catppuccin-mocha .title .content kbd,html.theme--catppuccin-mocha .content .title kbd,html.theme--catppuccin-mocha .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-mocha .subtitle .tag,html.theme--catppuccin-mocha .subtitle .content kbd,html.theme--catppuccin-mocha .content .subtitle kbd,html.theme--catppuccin-mocha .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-mocha .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-mocha .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-mocha .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-mocha .title.is-1{font-size:3rem}html.theme--catppuccin-mocha .title.is-2{font-size:2.5rem}html.theme--catppuccin-mocha .title.is-3{font-size:2rem}html.theme--catppuccin-mocha .title.is-4{font-size:1.5rem}html.theme--catppuccin-mocha .title.is-5{font-size:1.25rem}html.theme--catppuccin-mocha .title.is-6{font-size:1rem}html.theme--catppuccin-mocha .title.is-7{font-size:.75rem}html.theme--catppuccin-mocha .subtitle{color:#6c7086;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-mocha .subtitle strong{color:#6c7086;font-weight:600}html.theme--catppuccin-mocha .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-mocha .subtitle.is-1{font-size:3rem}html.theme--catppuccin-mocha .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-mocha .subtitle.is-3{font-size:2rem}html.theme--catppuccin-mocha .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-mocha .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-mocha .subtitle.is-6{font-size:1rem}html.theme--catppuccin-mocha .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-mocha .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-mocha .number{align-items:center;background-color:#181825;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{background-color:#1e1e2e;border-color:#585b70;border-radius:.4em;color:#7f849c}html.theme--catppuccin-mocha .select select::-moz-placeholder,html.theme--catppuccin-mocha .textarea::-moz-placeholder,html.theme--catppuccin-mocha .input::-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select::-webkit-input-placeholder,html.theme--catppuccin-mocha .textarea::-webkit-input-placeholder,html.theme--catppuccin-mocha .input::-webkit-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:-moz-placeholder,html.theme--catppuccin-mocha .textarea:-moz-placeholder,html.theme--catppuccin-mocha .input:-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:-ms-input-placeholder,html.theme--catppuccin-mocha .textarea:-ms-input-placeholder,html.theme--catppuccin-mocha .input:-ms-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:hover,html.theme--catppuccin-mocha .textarea:hover,html.theme--catppuccin-mocha .input:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-mocha .select select.is-hovered,html.theme--catppuccin-mocha .is-hovered.textarea,html.theme--catppuccin-mocha .is-hovered.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#6c7086}html.theme--catppuccin-mocha .select select:focus,html.theme--catppuccin-mocha .textarea:focus,html.theme--catppuccin-mocha .input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-mocha .select select.is-focused,html.theme--catppuccin-mocha .is-focused.textarea,html.theme--catppuccin-mocha .is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .select select:active,html.theme--catppuccin-mocha .textarea:active,html.theme--catppuccin-mocha .input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-mocha .select select.is-active,html.theme--catppuccin-mocha .is-active.textarea,html.theme--catppuccin-mocha .is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#89b4fa;box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select select[disabled],html.theme--catppuccin-mocha .textarea[disabled],html.theme--catppuccin-mocha .input[disabled],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-mocha .select select,fieldset[disabled] html.theme--catppuccin-mocha .textarea,fieldset[disabled] html.theme--catppuccin-mocha .input,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{background-color:#6c7086;border-color:#181825;box-shadow:none;color:#f7f8fd}html.theme--catppuccin-mocha .select select[disabled]::-moz-placeholder,html.theme--catppuccin-mocha .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-mocha .input[disabled]::-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]:-moz-placeholder,html.theme--catppuccin-mocha .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-mocha .input[disabled]:-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-mocha .textarea[readonly],html.theme--catppuccin-mocha .input[readonly],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-mocha .is-white.textarea,html.theme--catppuccin-mocha .is-white.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-mocha .is-white.textarea:focus,html.theme--catppuccin-mocha .is-white.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-mocha .is-white.is-focused.textarea,html.theme--catppuccin-mocha .is-white.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-white.textarea:active,html.theme--catppuccin-mocha .is-white.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-mocha .is-white.is-active.textarea,html.theme--catppuccin-mocha .is-white.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .is-black.textarea,html.theme--catppuccin-mocha .is-black.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-mocha .is-black.textarea:focus,html.theme--catppuccin-mocha .is-black.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-mocha .is-black.is-focused.textarea,html.theme--catppuccin-mocha .is-black.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-black.textarea:active,html.theme--catppuccin-mocha .is-black.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-mocha .is-black.is-active.textarea,html.theme--catppuccin-mocha .is-black.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .is-light.textarea,html.theme--catppuccin-mocha .is-light.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-mocha .is-light.textarea:focus,html.theme--catppuccin-mocha .is-light.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-mocha .is-light.is-focused.textarea,html.theme--catppuccin-mocha .is-light.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-light.textarea:active,html.theme--catppuccin-mocha .is-light.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-mocha .is-light.is-active.textarea,html.theme--catppuccin-mocha .is-light.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .is-dark.textarea,html.theme--catppuccin-mocha .content kbd.textarea,html.theme--catppuccin-mocha .is-dark.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-mocha .content kbd.input{border-color:#313244}html.theme--catppuccin-mocha .is-dark.textarea:focus,html.theme--catppuccin-mocha .content kbd.textarea:focus,html.theme--catppuccin-mocha .is-dark.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-mocha .content kbd.input:focus,html.theme--catppuccin-mocha .is-dark.is-focused.textarea,html.theme--catppuccin-mocha .content kbd.is-focused.textarea,html.theme--catppuccin-mocha .is-dark.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .content kbd.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-dark.textarea:active,html.theme--catppuccin-mocha .content kbd.textarea:active,html.theme--catppuccin-mocha .is-dark.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-mocha .content kbd.input:active,html.theme--catppuccin-mocha .is-dark.is-active.textarea,html.theme--catppuccin-mocha .content kbd.is-active.textarea,html.theme--catppuccin-mocha .is-dark.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .content kbd.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .is-primary.textarea,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink{border-color:#89b4fa}html.theme--catppuccin-mocha .is-primary.textarea:focus,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-mocha .is-primary.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-mocha .is-primary.is-focused.textarea,html.theme--catppuccin-mocha .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.textarea:active,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-mocha .is-primary.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-mocha .is-primary.is-active.textarea,html.theme--catppuccin-mocha .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .is-link.textarea,html.theme--catppuccin-mocha .is-link.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#89b4fa}html.theme--catppuccin-mocha .is-link.textarea:focus,html.theme--catppuccin-mocha .is-link.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-mocha .is-link.is-focused.textarea,html.theme--catppuccin-mocha .is-link.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-link.textarea:active,html.theme--catppuccin-mocha .is-link.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-mocha .is-link.is-active.textarea,html.theme--catppuccin-mocha .is-link.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .is-info.textarea,html.theme--catppuccin-mocha .is-info.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#94e2d5}html.theme--catppuccin-mocha .is-info.textarea:focus,html.theme--catppuccin-mocha .is-info.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-mocha .is-info.is-focused.textarea,html.theme--catppuccin-mocha .is-info.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-info.textarea:active,html.theme--catppuccin-mocha .is-info.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-mocha .is-info.is-active.textarea,html.theme--catppuccin-mocha .is-info.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .is-success.textarea,html.theme--catppuccin-mocha .is-success.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6e3a1}html.theme--catppuccin-mocha .is-success.textarea:focus,html.theme--catppuccin-mocha .is-success.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-mocha .is-success.is-focused.textarea,html.theme--catppuccin-mocha .is-success.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-success.textarea:active,html.theme--catppuccin-mocha .is-success.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-mocha .is-success.is-active.textarea,html.theme--catppuccin-mocha .is-success.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .is-warning.textarea,html.theme--catppuccin-mocha .is-warning.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#f9e2af}html.theme--catppuccin-mocha .is-warning.textarea:focus,html.theme--catppuccin-mocha .is-warning.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-mocha .is-warning.is-focused.textarea,html.theme--catppuccin-mocha .is-warning.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-warning.textarea:active,html.theme--catppuccin-mocha .is-warning.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-mocha .is-warning.is-active.textarea,html.theme--catppuccin-mocha .is-warning.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .is-danger.textarea,html.theme--catppuccin-mocha .is-danger.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#f38ba8}html.theme--catppuccin-mocha .is-danger.textarea:focus,html.theme--catppuccin-mocha .is-danger.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-mocha .is-danger.is-focused.textarea,html.theme--catppuccin-mocha .is-danger.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-danger.textarea:active,html.theme--catppuccin-mocha .is-danger.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-mocha .is-danger.is-active.textarea,html.theme--catppuccin-mocha .is-danger.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .is-small.textarea,html.theme--catppuccin-mocha .is-small.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-mocha .is-medium.textarea,html.theme--catppuccin-mocha .is-medium.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .is-large.textarea,html.theme--catppuccin-mocha .is-large.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .is-fullwidth.textarea,html.theme--catppuccin-mocha .is-fullwidth.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-mocha .is-inline.textarea,html.theme--catppuccin-mocha .is-inline.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-mocha .input.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-mocha .input.is-static,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-mocha .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-mocha .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-mocha .textarea[rows]{height:initial}html.theme--catppuccin-mocha .textarea.has-fixed-size{resize:none}html.theme--catppuccin-mocha .radio,html.theme--catppuccin-mocha .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-mocha .radio input,html.theme--catppuccin-mocha .checkbox input{cursor:pointer}html.theme--catppuccin-mocha .radio:hover,html.theme--catppuccin-mocha .checkbox:hover{color:#89dceb}html.theme--catppuccin-mocha .radio[disabled],html.theme--catppuccin-mocha .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-mocha .radio,fieldset[disabled] html.theme--catppuccin-mocha .checkbox,html.theme--catppuccin-mocha .radio input[disabled],html.theme--catppuccin-mocha .checkbox input[disabled]{color:#f7f8fd;cursor:not-allowed}html.theme--catppuccin-mocha .radio+.radio{margin-left:.5em}html.theme--catppuccin-mocha .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-mocha .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading)::after{border-color:#89b4fa;right:1.125em;z-index:4}html.theme--catppuccin-mocha .select.is-rounded select,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-mocha .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-mocha .select select::-ms-expand{display:none}html.theme--catppuccin-mocha .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-mocha .select select:hover{border-color:#181825}html.theme--catppuccin-mocha .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-mocha .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-mocha .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#89dceb}html.theme--catppuccin-mocha .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-mocha .select.is-white select{border-color:#fff}html.theme--catppuccin-mocha .select.is-white select:hover,html.theme--catppuccin-mocha .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-mocha .select.is-white select:focus,html.theme--catppuccin-mocha .select.is-white select.is-focused,html.theme--catppuccin-mocha .select.is-white select:active,html.theme--catppuccin-mocha .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-mocha .select.is-black select:hover,html.theme--catppuccin-mocha .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-mocha .select.is-black select:focus,html.theme--catppuccin-mocha .select.is-black select.is-focused,html.theme--catppuccin-mocha .select.is-black select:active,html.theme--catppuccin-mocha .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-mocha .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-mocha .select.is-light select:hover,html.theme--catppuccin-mocha .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-mocha .select.is-light select:focus,html.theme--catppuccin-mocha .select.is-light select.is-focused,html.theme--catppuccin-mocha .select.is-light select:active,html.theme--catppuccin-mocha .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .select.is-dark:not(:hover)::after,html.theme--catppuccin-mocha .content kbd.select:not(:hover)::after{border-color:#313244}html.theme--catppuccin-mocha .select.is-dark select,html.theme--catppuccin-mocha .content kbd.select select{border-color:#313244}html.theme--catppuccin-mocha .select.is-dark select:hover,html.theme--catppuccin-mocha .content kbd.select select:hover,html.theme--catppuccin-mocha .select.is-dark select.is-hovered,html.theme--catppuccin-mocha .content kbd.select select.is-hovered{border-color:#262735}html.theme--catppuccin-mocha .select.is-dark select:focus,html.theme--catppuccin-mocha .content kbd.select select:focus,html.theme--catppuccin-mocha .select.is-dark select.is-focused,html.theme--catppuccin-mocha .content kbd.select select.is-focused,html.theme--catppuccin-mocha .select.is-dark select:active,html.theme--catppuccin-mocha .content kbd.select select:active,html.theme--catppuccin-mocha .select.is-dark select.is-active,html.theme--catppuccin-mocha .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .select.is-primary:not(:hover)::after,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-primary select,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-primary select:hover,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-mocha .select.is-primary select.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#71a4f9}html.theme--catppuccin-mocha .select.is-primary select:focus,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-mocha .select.is-primary select.is-focused,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-mocha .select.is-primary select:active,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-mocha .select.is-primary select.is-active,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select.is-link:not(:hover)::after{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-link select{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-link select:hover,html.theme--catppuccin-mocha .select.is-link select.is-hovered{border-color:#71a4f9}html.theme--catppuccin-mocha .select.is-link select:focus,html.theme--catppuccin-mocha .select.is-link select.is-focused,html.theme--catppuccin-mocha .select.is-link select:active,html.theme--catppuccin-mocha .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select.is-info:not(:hover)::after{border-color:#94e2d5}html.theme--catppuccin-mocha .select.is-info select{border-color:#94e2d5}html.theme--catppuccin-mocha .select.is-info select:hover,html.theme--catppuccin-mocha .select.is-info select.is-hovered{border-color:#80ddcd}html.theme--catppuccin-mocha .select.is-info select:focus,html.theme--catppuccin-mocha .select.is-info select.is-focused,html.theme--catppuccin-mocha .select.is-info select:active,html.theme--catppuccin-mocha .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .select.is-success:not(:hover)::after{border-color:#a6e3a1}html.theme--catppuccin-mocha .select.is-success select{border-color:#a6e3a1}html.theme--catppuccin-mocha .select.is-success select:hover,html.theme--catppuccin-mocha .select.is-success select.is-hovered{border-color:#93dd8d}html.theme--catppuccin-mocha .select.is-success select:focus,html.theme--catppuccin-mocha .select.is-success select.is-focused,html.theme--catppuccin-mocha .select.is-success select:active,html.theme--catppuccin-mocha .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .select.is-warning:not(:hover)::after{border-color:#f9e2af}html.theme--catppuccin-mocha .select.is-warning select{border-color:#f9e2af}html.theme--catppuccin-mocha .select.is-warning select:hover,html.theme--catppuccin-mocha .select.is-warning select.is-hovered{border-color:#f7d997}html.theme--catppuccin-mocha .select.is-warning select:focus,html.theme--catppuccin-mocha .select.is-warning select.is-focused,html.theme--catppuccin-mocha .select.is-warning select:active,html.theme--catppuccin-mocha .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .select.is-danger:not(:hover)::after{border-color:#f38ba8}html.theme--catppuccin-mocha .select.is-danger select{border-color:#f38ba8}html.theme--catppuccin-mocha .select.is-danger select:hover,html.theme--catppuccin-mocha .select.is-danger select.is-hovered{border-color:#f17497}html.theme--catppuccin-mocha .select.is-danger select:focus,html.theme--catppuccin-mocha .select.is-danger select.is-focused,html.theme--catppuccin-mocha .select.is-danger select:active,html.theme--catppuccin-mocha .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .select.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-mocha .select.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .select.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .select.is-disabled::after{border-color:#f7f8fd !important;opacity:0.5}html.theme--catppuccin-mocha .select.is-fullwidth{width:100%}html.theme--catppuccin-mocha .select.is-fullwidth select{width:100%}html.theme--catppuccin-mocha .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-mocha .select.is-loading.is-small:after,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-mocha .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-mocha .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-mocha .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-mocha .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:hover .file-cta,html.theme--catppuccin-mocha .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:focus .file-cta,html.theme--catppuccin-mocha .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:active .file-cta,html.theme--catppuccin-mocha .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-black:hover .file-cta,html.theme--catppuccin-mocha .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-black:focus .file-cta,html.theme--catppuccin-mocha .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-black:active .file-cta,html.theme--catppuccin-mocha .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:hover .file-cta,html.theme--catppuccin-mocha .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:focus .file-cta,html.theme--catppuccin-mocha .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:active .file-cta,html.theme--catppuccin-mocha .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-dark .file-cta,html.theme--catppuccin-mocha .content kbd.file .file-cta{background-color:#313244;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-dark:hover .file-cta,html.theme--catppuccin-mocha .content kbd.file:hover .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-hovered .file-cta{background-color:#2c2d3d;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-dark:focus .file-cta,html.theme--catppuccin-mocha .content kbd.file:focus .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-focused .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(49,50,68,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-dark:active .file-cta,html.theme--catppuccin-mocha .content kbd.file:active .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-active .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-active .file-cta{background-color:#262735;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary:hover .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary:focus .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-focused .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(137,180,250,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-primary:active .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-active .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link .file-cta{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link:hover .file-cta,html.theme--catppuccin-mocha .file.is-link.is-hovered .file-cta{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link:focus .file-cta,html.theme--catppuccin-mocha .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(137,180,250,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-link:active .file-cta,html.theme--catppuccin-mocha .file.is-link.is-active .file-cta{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-info .file-cta{background-color:#94e2d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:hover .file-cta,html.theme--catppuccin-mocha .file.is-info.is-hovered .file-cta{background-color:#8adfd1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:focus .file-cta,html.theme--catppuccin-mocha .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(148,226,213,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:active .file-cta,html.theme--catppuccin-mocha .file.is-info.is-active .file-cta{background-color:#80ddcd;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success .file-cta{background-color:#a6e3a1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:hover .file-cta,html.theme--catppuccin-mocha .file.is-success.is-hovered .file-cta{background-color:#9de097;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:focus .file-cta,html.theme--catppuccin-mocha .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,227,161,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:active .file-cta,html.theme--catppuccin-mocha .file.is-success.is-active .file-cta{background-color:#93dd8d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning .file-cta{background-color:#f9e2af;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:hover .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-hovered .file-cta{background-color:#f8dea3;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:focus .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(249,226,175,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:active .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-active .file-cta{background-color:#f7d997;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-danger .file-cta{background-color:#f38ba8;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-danger:hover .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-hovered .file-cta{background-color:#f27f9f;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-danger:focus .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(243,139,168,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-danger:active .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-active .file-cta{background-color:#f17497;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-mocha .file.is-normal{font-size:1rem}html.theme--catppuccin-mocha .file.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-mocha .file.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-mocha .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-mocha .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-mocha .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-mocha .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-mocha .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-mocha .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-mocha .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-mocha .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-mocha .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-mocha .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-mocha .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-mocha .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-mocha .file.is-centered{justify-content:center}html.theme--catppuccin-mocha .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-mocha .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-mocha .file.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-mocha .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-mocha .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-mocha .file-label:hover .file-cta{background-color:#2c2d3d;color:#b8c5ef}html.theme--catppuccin-mocha .file-label:hover .file-name{border-color:#525569}html.theme--catppuccin-mocha .file-label:active .file-cta{background-color:#262735;color:#b8c5ef}html.theme--catppuccin-mocha .file-label:active .file-name{border-color:#4d4f62}html.theme--catppuccin-mocha .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha .file-name{border-color:#585b70;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-mocha .file-cta{background-color:#313244;color:#cdd6f4}html.theme--catppuccin-mocha .file-name{border-color:#585b70;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-mocha .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-mocha .file-icon .fa{font-size:14px}html.theme--catppuccin-mocha .label{color:#b8c5ef;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-mocha .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-mocha .label.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-mocha .label.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .label.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-mocha .help.is-white{color:#fff}html.theme--catppuccin-mocha .help.is-black{color:#0a0a0a}html.theme--catppuccin-mocha .help.is-light{color:#f5f5f5}html.theme--catppuccin-mocha .help.is-dark,html.theme--catppuccin-mocha .content kbd.help{color:#313244}html.theme--catppuccin-mocha .help.is-primary,html.theme--catppuccin-mocha .docstring>section>a.help.docs-sourcelink{color:#89b4fa}html.theme--catppuccin-mocha .help.is-link{color:#89b4fa}html.theme--catppuccin-mocha .help.is-info{color:#94e2d5}html.theme--catppuccin-mocha .help.is-success{color:#a6e3a1}html.theme--catppuccin-mocha .help.is-warning{color:#f9e2af}html.theme--catppuccin-mocha .help.is-danger{color:#f38ba8}html.theme--catppuccin-mocha .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-mocha .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-mocha .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-mocha .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-mocha .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-mocha .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-mocha .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-mocha .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-mocha .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field.is-horizontal{display:flex}}html.theme--catppuccin-mocha .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-mocha .field-label.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-mocha .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-mocha .field-body .field{margin-bottom:0}html.theme--catppuccin-mocha .field-body>.field{flex-shrink:1}html.theme--catppuccin-mocha .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-mocha .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-mocha .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-mocha .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select:focus~.icon{color:#313244}html.theme--catppuccin-mocha .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-mocha .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-mocha .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-mocha .control.has-icons-left .icon,html.theme--catppuccin-mocha .control.has-icons-right .icon{color:#585b70;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-mocha .control.has-icons-left .input,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-mocha .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-mocha .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-mocha .control.has-icons-right .input,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-mocha .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-mocha .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-mocha .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-mocha .control.is-loading.is-small:after,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-mocha .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-mocha .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-mocha .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-mocha .breadcrumb a{align-items:center;color:#89b4fa;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-mocha .breadcrumb a:hover{color:#89dceb}html.theme--catppuccin-mocha .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-mocha .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-mocha .breadcrumb li.is-active a{color:#b8c5ef;cursor:default;pointer-events:none}html.theme--catppuccin-mocha .breadcrumb li+li::before{color:#6c7086;content:"\0002f"}html.theme--catppuccin-mocha .breadcrumb ul,html.theme--catppuccin-mocha .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-mocha .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-mocha .breadcrumb.is-centered ol,html.theme--catppuccin-mocha .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-mocha .breadcrumb.is-right ol,html.theme--catppuccin-mocha .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-mocha .breadcrumb.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-mocha .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-mocha .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-mocha .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-mocha .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-mocha .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#cdd6f4;max-width:100%;position:relative}html.theme--catppuccin-mocha .card-footer:first-child,html.theme--catppuccin-mocha .card-content:first-child,html.theme--catppuccin-mocha .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-mocha .card-footer:last-child,html.theme--catppuccin-mocha .card-content:last-child,html.theme--catppuccin-mocha .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-mocha .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-mocha .card-header-title{align-items:center;color:#b8c5ef;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-mocha .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-mocha .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-mocha .card-image{display:block;position:relative}html.theme--catppuccin-mocha .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-mocha .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-mocha .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-mocha .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-mocha .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-mocha .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-mocha .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-mocha .dropdown.is-active .dropdown-menu,html.theme--catppuccin-mocha .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-mocha .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-mocha .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-mocha .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-mocha .dropdown-content{background-color:#181825;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-mocha .dropdown-item{color:#cdd6f4;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-mocha a.dropdown-item,html.theme--catppuccin-mocha button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-mocha a.dropdown-item:hover,html.theme--catppuccin-mocha button.dropdown-item:hover{background-color:#181825;color:#0a0a0a}html.theme--catppuccin-mocha a.dropdown-item.is-active,html.theme--catppuccin-mocha button.dropdown-item.is-active{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-mocha .level{align-items:center;justify-content:space-between}html.theme--catppuccin-mocha .level code{border-radius:.4em}html.theme--catppuccin-mocha .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-mocha .level.is-mobile{display:flex}html.theme--catppuccin-mocha .level.is-mobile .level-left,html.theme--catppuccin-mocha .level.is-mobile .level-right{display:flex}html.theme--catppuccin-mocha .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-mocha .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-mocha .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level{display:flex}html.theme--catppuccin-mocha .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-mocha .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-mocha .level-item .title,html.theme--catppuccin-mocha .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-mocha .level-left,html.theme--catppuccin-mocha .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .level-left .level-item.is-flexible,html.theme--catppuccin-mocha .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-left .level-item:not(:last-child),html.theme--catppuccin-mocha .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-mocha .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-left{display:flex}}html.theme--catppuccin-mocha .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-right{display:flex}}html.theme--catppuccin-mocha .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-mocha .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-mocha .media .media{border-top:1px solid rgba(88,91,112,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-mocha .media .media .content:not(:last-child),html.theme--catppuccin-mocha .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-mocha .media .media .media{padding-top:.5rem}html.theme--catppuccin-mocha .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-mocha .media+.media{border-top:1px solid rgba(88,91,112,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-mocha .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-mocha .media-left,html.theme--catppuccin-mocha .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .media-left{margin-right:1rem}html.theme--catppuccin-mocha .media-right{margin-left:1rem}html.theme--catppuccin-mocha .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .media-content{overflow-x:auto}}html.theme--catppuccin-mocha .menu{font-size:1rem}html.theme--catppuccin-mocha .menu.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-mocha .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .menu.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .menu-list{line-height:1.25}html.theme--catppuccin-mocha .menu-list a{border-radius:3px;color:#cdd6f4;display:block;padding:0.5em 0.75em}html.theme--catppuccin-mocha .menu-list a:hover{background-color:#181825;color:#b8c5ef}html.theme--catppuccin-mocha .menu-list a.is-active{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .menu-list li ul{border-left:1px solid #585b70;margin:.75em;padding-left:.75em}html.theme--catppuccin-mocha .menu-label{color:#f7f8fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-mocha .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-mocha .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-mocha .message{background-color:#181825;border-radius:.4em;font-size:1rem}html.theme--catppuccin-mocha .message strong{color:currentColor}html.theme--catppuccin-mocha .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-mocha .message.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-mocha .message.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .message.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .message.is-white{background-color:#fff}html.theme--catppuccin-mocha .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-mocha .message.is-black{background-color:#fafafa}html.theme--catppuccin-mocha .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-mocha .message.is-light{background-color:#fafafa}html.theme--catppuccin-mocha .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-mocha .message.is-dark,html.theme--catppuccin-mocha .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-mocha .message.is-dark .message-header,html.theme--catppuccin-mocha .content kbd.message .message-header{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .message.is-dark .message-body,html.theme--catppuccin-mocha .content kbd.message .message-body{border-color:#313244}html.theme--catppuccin-mocha .message.is-primary,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink{background-color:#ebf3fe}html.theme--catppuccin-mocha .message.is-primary .message-header,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink .message-header{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .message.is-primary .message-body,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink .message-body{border-color:#89b4fa;color:#063c93}html.theme--catppuccin-mocha .message.is-link{background-color:#ebf3fe}html.theme--catppuccin-mocha .message.is-link .message-header{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .message.is-link .message-body{border-color:#89b4fa;color:#063c93}html.theme--catppuccin-mocha .message.is-info{background-color:#effbf9}html.theme--catppuccin-mocha .message.is-info .message-header{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-info .message-body{border-color:#94e2d5;color:#207466}html.theme--catppuccin-mocha .message.is-success{background-color:#f0faef}html.theme--catppuccin-mocha .message.is-success .message-header{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-success .message-body{border-color:#a6e3a1;color:#287222}html.theme--catppuccin-mocha .message.is-warning{background-color:#fef8ec}html.theme--catppuccin-mocha .message.is-warning .message-header{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-warning .message-body{border-color:#f9e2af;color:#8a620a}html.theme--catppuccin-mocha .message.is-danger{background-color:#fdedf1}html.theme--catppuccin-mocha .message.is-danger .message-header{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .message.is-danger .message-body{border-color:#f38ba8;color:#991036}html.theme--catppuccin-mocha .message-header{align-items:center;background-color:#cdd6f4;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-mocha .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-mocha .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .message-body{border-color:#585b70;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#cdd6f4;padding:1.25em 1.5em}html.theme--catppuccin-mocha .message-body code,html.theme--catppuccin-mocha .message-body pre{background-color:#fff}html.theme--catppuccin-mocha .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-mocha .modal.is-active{display:flex}html.theme--catppuccin-mocha .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-mocha .modal-content,html.theme--catppuccin-mocha .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-mocha .modal-content,html.theme--catppuccin-mocha .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-mocha .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-mocha .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-mocha .modal-card-head,html.theme--catppuccin-mocha .modal-card-foot{align-items:center;background-color:#181825;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-mocha .modal-card-head{border-bottom:1px solid #585b70;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-mocha .modal-card-title{color:#cdd6f4;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-mocha .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #585b70}html.theme--catppuccin-mocha .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-mocha .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#1e1e2e;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-mocha .navbar{background-color:#89b4fa;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-mocha .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-mocha .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-mocha .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-dark,html.theme--catppuccin-mocha .content kbd.navbar{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-burger,html.theme--catppuccin-mocha .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#313244;color:#fff}}html.theme--catppuccin-mocha .navbar.is-primary,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-burger,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa;color:#fff}}html.theme--catppuccin-mocha .navbar.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa;color:#fff}}html.theme--catppuccin-mocha .navbar.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#94e2d5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#f9e2af;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f38ba8;color:#fff}}html.theme--catppuccin-mocha .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-mocha .navbar.has-shadow{box-shadow:0 2px 0 0 #181825}html.theme--catppuccin-mocha .navbar.is-fixed-bottom,html.theme--catppuccin-mocha .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #181825}html.theme--catppuccin-mocha .navbar.is-fixed-top{top:0}html.theme--catppuccin-mocha html.has-navbar-fixed-top,html.theme--catppuccin-mocha body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-mocha .navbar-brand,html.theme--catppuccin-mocha .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-mocha .navbar-brand a.navbar-item:focus,html.theme--catppuccin-mocha .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-mocha .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-mocha .navbar-burger{color:#cdd6f4;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-mocha .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--catppuccin-mocha .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-mocha .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-mocha .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-mocha .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-mocha .navbar-menu{display:none}html.theme--catppuccin-mocha .navbar-item,html.theme--catppuccin-mocha .navbar-link{color:#cdd6f4;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-mocha .navbar-item .icon:only-child,html.theme--catppuccin-mocha .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-mocha a.navbar-item,html.theme--catppuccin-mocha .navbar-link{cursor:pointer}html.theme--catppuccin-mocha a.navbar-item:focus,html.theme--catppuccin-mocha a.navbar-item:focus-within,html.theme--catppuccin-mocha a.navbar-item:hover,html.theme--catppuccin-mocha a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar-link:focus,html.theme--catppuccin-mocha .navbar-link:focus-within,html.theme--catppuccin-mocha .navbar-link:hover,html.theme--catppuccin-mocha .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}html.theme--catppuccin-mocha .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .navbar-item img{max-height:1.75rem}html.theme--catppuccin-mocha .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-mocha .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-mocha .navbar-item.is-tab:focus,html.theme--catppuccin-mocha .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#89b4fa;border-bottom-style:solid;border-bottom-width:3px;color:#89b4fa;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-mocha .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-mocha .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-mocha .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-mocha .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .navbar>.container{display:block}html.theme--catppuccin-mocha .navbar-brand .navbar-item,html.theme--catppuccin-mocha .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-mocha .navbar-link::after{display:none}html.theme--catppuccin-mocha .navbar-menu{background-color:#89b4fa;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-mocha .navbar-menu.is-active{display:block}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch,html.theme--catppuccin-mocha .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-mocha .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-mocha .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-mocha html.has-navbar-fixed-top-touch,html.theme--catppuccin-mocha body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar,html.theme--catppuccin-mocha .navbar-menu,html.theme--catppuccin-mocha .navbar-start,html.theme--catppuccin-mocha .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-mocha .navbar{min-height:4rem}html.theme--catppuccin-mocha .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-mocha .navbar.is-spaced .navbar-start,html.theme--catppuccin-mocha .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-mocha .navbar.is-spaced a.navbar-item,html.theme--catppuccin-mocha .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#7f849c}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}html.theme--catppuccin-mocha .navbar-burger{display:none}html.theme--catppuccin-mocha .navbar-item,html.theme--catppuccin-mocha .navbar-link{align-items:center;display:flex}html.theme--catppuccin-mocha .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-mocha .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-mocha .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-mocha .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-mocha .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-mocha .navbar-dropdown{background-color:#89b4fa;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-mocha .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#7f849c}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}.navbar.is-spaced html.theme--catppuccin-mocha .navbar-dropdown,html.theme--catppuccin-mocha .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-mocha .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-mocha .navbar-divider{display:block}html.theme--catppuccin-mocha .navbar>.container .navbar-brand,html.theme--catppuccin-mocha .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-mocha .navbar>.container .navbar-menu,html.theme--catppuccin-mocha .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-mocha .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-mocha html.has-navbar-fixed-top-desktop,html.theme--catppuccin-mocha body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-mocha html.has-spaced-navbar-fixed-top,html.theme--catppuccin-mocha body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-mocha html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-mocha body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-mocha a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar-link.is-active{color:#89b4fa}html.theme--catppuccin-mocha a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-mocha .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-mocha .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-mocha .pagination.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-mocha .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .pagination.is-rounded .pagination-previous,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-mocha .pagination.is-rounded .pagination-next,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-mocha .pagination.is-rounded .pagination-link,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-mocha .pagination,html.theme--catppuccin-mocha .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link{border-color:#585b70;color:#89b4fa;min-width:2.5em}html.theme--catppuccin-mocha .pagination-previous:hover,html.theme--catppuccin-mocha .pagination-next:hover,html.theme--catppuccin-mocha .pagination-link:hover{border-color:#6c7086;color:#89dceb}html.theme--catppuccin-mocha .pagination-previous:focus,html.theme--catppuccin-mocha .pagination-next:focus,html.theme--catppuccin-mocha .pagination-link:focus{border-color:#6c7086}html.theme--catppuccin-mocha .pagination-previous:active,html.theme--catppuccin-mocha .pagination-next:active,html.theme--catppuccin-mocha .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-mocha .pagination-previous[disabled],html.theme--catppuccin-mocha .pagination-previous.is-disabled,html.theme--catppuccin-mocha .pagination-next[disabled],html.theme--catppuccin-mocha .pagination-next.is-disabled,html.theme--catppuccin-mocha .pagination-link[disabled],html.theme--catppuccin-mocha .pagination-link.is-disabled{background-color:#585b70;border-color:#585b70;box-shadow:none;color:#f7f8fd;opacity:0.5}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-mocha .pagination-link.is-current{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .pagination-ellipsis{color:#6c7086;pointer-events:none}html.theme--catppuccin-mocha .pagination-list{flex-wrap:wrap}html.theme--catppuccin-mocha .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .pagination{flex-wrap:wrap}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-mocha .pagination-previous{order:2}html.theme--catppuccin-mocha .pagination-next{order:3}html.theme--catppuccin-mocha .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-mocha .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-mocha .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-mocha .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-mocha .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-mocha .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-mocha .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-mocha .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-mocha .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-mocha .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-mocha .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-mocha .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-mocha .panel.is-dark .panel-heading,html.theme--catppuccin-mocha .content kbd.panel .panel-heading{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-mocha .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#313244}html.theme--catppuccin-mocha .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-mocha .content kbd.panel .panel-block.is-active .panel-icon{color:#313244}html.theme--catppuccin-mocha .panel.is-primary .panel-heading,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel.is-link .panel-heading{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .panel.is-link .panel-tabs a.is-active{border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .panel.is-link .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel.is-info .panel-heading{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-info .panel-tabs a.is-active{border-bottom-color:#94e2d5}html.theme--catppuccin-mocha .panel.is-info .panel-block.is-active .panel-icon{color:#94e2d5}html.theme--catppuccin-mocha .panel.is-success .panel-heading{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6e3a1}html.theme--catppuccin-mocha .panel.is-success .panel-block.is-active .panel-icon{color:#a6e3a1}html.theme--catppuccin-mocha .panel.is-warning .panel-heading{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#f9e2af}html.theme--catppuccin-mocha .panel.is-warning .panel-block.is-active .panel-icon{color:#f9e2af}html.theme--catppuccin-mocha .panel.is-danger .panel-heading{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f38ba8}html.theme--catppuccin-mocha .panel.is-danger .panel-block.is-active .panel-icon{color:#f38ba8}html.theme--catppuccin-mocha .panel-tabs:not(:last-child),html.theme--catppuccin-mocha .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-mocha .panel-heading{background-color:#45475a;border-radius:8px 8px 0 0;color:#b8c5ef;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-mocha .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-mocha .panel-tabs a{border-bottom:1px solid #585b70;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-mocha .panel-tabs a.is-active{border-bottom-color:#45475a;color:#71a4f9}html.theme--catppuccin-mocha .panel-list a{color:#cdd6f4}html.theme--catppuccin-mocha .panel-list a:hover{color:#89b4fa}html.theme--catppuccin-mocha .panel-block{align-items:center;color:#b8c5ef;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-mocha .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-mocha .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-mocha .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-mocha .panel-block.is-active{border-left-color:#89b4fa;color:#71a4f9}html.theme--catppuccin-mocha .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-mocha a.panel-block,html.theme--catppuccin-mocha label.panel-block{cursor:pointer}html.theme--catppuccin-mocha a.panel-block:hover,html.theme--catppuccin-mocha label.panel-block:hover{background-color:#181825}html.theme--catppuccin-mocha .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f7f8fd;margin-right:.75em}html.theme--catppuccin-mocha .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-mocha .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--catppuccin-mocha .tabs a{align-items:center;border-bottom-color:#585b70;border-bottom-style:solid;border-bottom-width:1px;color:#cdd6f4;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-mocha .tabs a:hover{border-bottom-color:#b8c5ef;color:#b8c5ef}html.theme--catppuccin-mocha .tabs li{display:block}html.theme--catppuccin-mocha .tabs li.is-active a{border-bottom-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .tabs ul{align-items:center;border-bottom-color:#585b70;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-mocha .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-mocha .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-mocha .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-mocha .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-mocha .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-mocha .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-mocha .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-mocha .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-mocha .tabs.is-boxed a:hover{background-color:#181825;border-bottom-color:#585b70}html.theme--catppuccin-mocha .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#585b70;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-mocha .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .tabs.is-toggle a{border-color:#585b70;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-mocha .tabs.is-toggle a:hover{background-color:#181825;border-color:#6c7086;z-index:2}html.theme--catppuccin-mocha .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-mocha .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-mocha .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-mocha .tabs.is-toggle li.is-active a{background-color:#89b4fa;border-color:#89b4fa;color:#fff;z-index:1}html.theme--catppuccin-mocha .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-mocha .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-mocha .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-mocha .tabs.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-mocha .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .column.is-narrow,html.theme--catppuccin-mocha .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full,html.theme--catppuccin-mocha .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters,html.theme--catppuccin-mocha .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds,html.theme--catppuccin-mocha .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half,html.theme--catppuccin-mocha .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third,html.theme--catppuccin-mocha .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter,html.theme--catppuccin-mocha .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth,html.theme--catppuccin-mocha .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths,html.theme--catppuccin-mocha .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths,html.theme--catppuccin-mocha .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths,html.theme--catppuccin-mocha .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters,html.theme--catppuccin-mocha .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds,html.theme--catppuccin-mocha .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half,html.theme--catppuccin-mocha .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third,html.theme--catppuccin-mocha .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter,html.theme--catppuccin-mocha .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth,html.theme--catppuccin-mocha .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths,html.theme--catppuccin-mocha .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths,html.theme--catppuccin-mocha .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths,html.theme--catppuccin-mocha .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-mocha .column.is-0,html.theme--catppuccin-mocha .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0,html.theme--catppuccin-mocha .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-mocha .column.is-1,html.theme--catppuccin-mocha .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1,html.theme--catppuccin-mocha .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2,html.theme--catppuccin-mocha .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2,html.theme--catppuccin-mocha .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3,html.theme--catppuccin-mocha .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3,html.theme--catppuccin-mocha .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-mocha .column.is-4,html.theme--catppuccin-mocha .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4,html.theme--catppuccin-mocha .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5,html.theme--catppuccin-mocha .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5,html.theme--catppuccin-mocha .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6,html.theme--catppuccin-mocha .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6,html.theme--catppuccin-mocha .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-mocha .column.is-7,html.theme--catppuccin-mocha .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7,html.theme--catppuccin-mocha .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8,html.theme--catppuccin-mocha .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8,html.theme--catppuccin-mocha .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9,html.theme--catppuccin-mocha .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9,html.theme--catppuccin-mocha .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-mocha .column.is-10,html.theme--catppuccin-mocha .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10,html.theme--catppuccin-mocha .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11,html.theme--catppuccin-mocha .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11,html.theme--catppuccin-mocha .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12,html.theme--catppuccin-mocha .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12,html.theme--catppuccin-mocha .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-mocha .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-mocha .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-mocha .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-mocha .columns.is-centered{justify-content:center}html.theme--catppuccin-mocha .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-mocha .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-mocha .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-mocha .columns.is-mobile{display:flex}html.theme--catppuccin-mocha .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-mocha .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-desktop{display:flex}}html.theme--catppuccin-mocha .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-mocha .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-mocha .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-mocha .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-mocha .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-mocha .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-mocha .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-mocha .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-mocha .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-mocha .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-mocha .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-mocha .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-mocha .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-mocha .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-mocha .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-mocha .tile.is-child{margin:0 !important}html.theme--catppuccin-mocha .tile.is-parent{padding:.75rem}html.theme--catppuccin-mocha .tile.is-vertical{flex-direction:column}html.theme--catppuccin-mocha .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .tile:not(.is-child){display:flex}html.theme--catppuccin-mocha .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .tile.is-3{flex:none;width:25%}html.theme--catppuccin-mocha .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .tile.is-6{flex:none;width:50%}html.theme--catppuccin-mocha .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .tile.is-9{flex:none;width:75%}html.theme--catppuccin-mocha .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-mocha .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-mocha .hero .navbar{background:none}html.theme--catppuccin-mocha .hero .tabs ul{border-bottom:none}html.theme--catppuccin-mocha .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-white strong{color:inherit}html.theme--catppuccin-mocha .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-mocha .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-mocha .hero.is-white .navbar-item,html.theme--catppuccin-mocha .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-mocha .hero.is-white a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-white .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-mocha .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-mocha .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-black strong{color:inherit}html.theme--catppuccin-mocha .hero.is-black .title{color:#fff}html.theme--catppuccin-mocha .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-mocha .hero.is-black .navbar-item,html.theme--catppuccin-mocha .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-black a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-black .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-mocha .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-light strong{color:inherit}html.theme--catppuccin-mocha .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-mocha .hero.is-light .navbar-item,html.theme--catppuccin-mocha .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-light .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-mocha .hero.is-dark,html.theme--catppuccin-mocha .content kbd.hero{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-dark strong,html.theme--catppuccin-mocha .content kbd.hero strong{color:inherit}html.theme--catppuccin-mocha .hero.is-dark .title,html.theme--catppuccin-mocha .content kbd.hero .title{color:#fff}html.theme--catppuccin-mocha .hero.is-dark .subtitle,html.theme--catppuccin-mocha .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-mocha .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-dark .subtitle strong,html.theme--catppuccin-mocha .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-dark .navbar-menu,html.theme--catppuccin-mocha .content kbd.hero .navbar-menu{background-color:#313244}}html.theme--catppuccin-mocha .hero.is-dark .navbar-item,html.theme--catppuccin-mocha .content kbd.hero .navbar-item,html.theme--catppuccin-mocha .hero.is-dark .navbar-link,html.theme--catppuccin-mocha .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-dark .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.hero .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.hero .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .hero.is-dark .tabs a,html.theme--catppuccin-mocha .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-dark .tabs a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs li.is-active a{color:#313244 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#313244}html.theme--catppuccin-mocha .hero.is-dark.is-bold,html.theme--catppuccin-mocha .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #181c2a 0%, #313244 71%, #3c3856 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-mocha .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #181c2a 0%, #313244 71%, #3c3856 100%)}}html.theme--catppuccin-mocha .hero.is-primary,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-primary strong,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-mocha .hero.is-primary .title,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-mocha .hero.is-primary .subtitle,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-primary .subtitle strong,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-primary .navbar-menu,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#89b4fa}}html.theme--catppuccin-mocha .hero.is-primary .navbar-item,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-mocha .hero.is-primary .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-primary .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .hero.is-primary .tabs a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-primary .tabs a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#89b4fa !important;opacity:1}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .hero.is-primary.is-bold,html.theme--catppuccin-mocha .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-mocha .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}}html.theme--catppuccin-mocha .hero.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-link strong{color:inherit}html.theme--catppuccin-mocha .hero.is-link .title{color:#fff}html.theme--catppuccin-mocha .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-link .navbar-menu{background-color:#89b4fa}}html.theme--catppuccin-mocha .hero.is-link .navbar-item,html.theme--catppuccin-mocha .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-link a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-link .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-link .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-link .tabs li.is-active a{color:#89b4fa !important;opacity:1}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .hero.is-link.is-bold{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}}html.theme--catppuccin-mocha .hero.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-info strong{color:inherit}html.theme--catppuccin-mocha .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-info .navbar-menu{background-color:#94e2d5}}html.theme--catppuccin-mocha .hero.is-info .navbar-item,html.theme--catppuccin-mocha .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-info .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-info .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-info .tabs li.is-active a{color:#94e2d5 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .hero.is-info.is-bold{background-image:linear-gradient(141deg, #63e0b6 0%, #94e2d5 71%, #a5eaea 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #63e0b6 0%, #94e2d5 71%, #a5eaea 100%)}}html.theme--catppuccin-mocha .hero.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-success strong{color:inherit}html.theme--catppuccin-mocha .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-success .navbar-menu{background-color:#a6e3a1}}html.theme--catppuccin-mocha .hero.is-success .navbar-item,html.theme--catppuccin-mocha .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-success .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-success .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-success .tabs li.is-active a{color:#a6e3a1 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .hero.is-success.is-bold{background-image:linear-gradient(141deg, #8ce071 0%, #a6e3a1 71%, #b2ebb7 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #8ce071 0%, #a6e3a1 71%, #b2ebb7 100%)}}html.theme--catppuccin-mocha .hero.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-warning strong{color:inherit}html.theme--catppuccin-mocha .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-warning .navbar-menu{background-color:#f9e2af}}html.theme--catppuccin-mocha .hero.is-warning .navbar-item,html.theme--catppuccin-mocha .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-warning .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-warning .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-warning .tabs li.is-active a{color:#f9e2af !important;opacity:1}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #fcbd79 0%, #f9e2af 71%, #fcf4c5 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #fcbd79 0%, #f9e2af 71%, #fcf4c5 100%)}}html.theme--catppuccin-mocha .hero.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-danger strong{color:inherit}html.theme--catppuccin-mocha .hero.is-danger .title{color:#fff}html.theme--catppuccin-mocha .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-danger .navbar-menu{background-color:#f38ba8}}html.theme--catppuccin-mocha .hero.is-danger .navbar-item,html.theme--catppuccin-mocha .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-danger .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-danger .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-danger .tabs li.is-active a{color:#f38ba8 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #f7549d 0%, #f38ba8 71%, #f8a0a9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f7549d 0%, #f38ba8 71%, #f8a0a9 100%)}}html.theme--catppuccin-mocha .hero.is-small .hero-body,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-mocha .hero.is-halfheight .hero-body,html.theme--catppuccin-mocha .hero.is-fullheight .hero-body,html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-mocha .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-mocha .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-mocha .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-mocha .hero-video{overflow:hidden}html.theme--catppuccin-mocha .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-mocha .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero-video{display:none}}html.theme--catppuccin-mocha .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero-buttons .button{display:flex}html.theme--catppuccin-mocha .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-mocha .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-mocha .hero-head,html.theme--catppuccin-mocha .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero-body{padding:3rem 3rem}}html.theme--catppuccin-mocha .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .section{padding:3rem 3rem}html.theme--catppuccin-mocha .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-mocha .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-mocha .footer{background-color:#181825;padding:3rem 1.5rem 6rem}html.theme--catppuccin-mocha h1 .docs-heading-anchor,html.theme--catppuccin-mocha h1 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h1 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h2 .docs-heading-anchor,html.theme--catppuccin-mocha h2 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h2 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h3 .docs-heading-anchor,html.theme--catppuccin-mocha h3 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h3 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h4 .docs-heading-anchor,html.theme--catppuccin-mocha h4 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h4 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h5 .docs-heading-anchor,html.theme--catppuccin-mocha h5 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h5 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h6 .docs-heading-anchor,html.theme--catppuccin-mocha h6 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h6 .docs-heading-anchor:visited{color:#cdd6f4}html.theme--catppuccin-mocha h1 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h2 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h3 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h4 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h5 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-mocha h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-mocha h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-mocha .docs-light-only{display:none !important}html.theme--catppuccin-mocha pre{position:relative;overflow:hidden}html.theme--catppuccin-mocha pre code,html.theme--catppuccin-mocha pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-mocha pre code:first-of-type,html.theme--catppuccin-mocha pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-mocha pre code:last-of-type,html.theme--catppuccin-mocha pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-mocha pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#cdd6f4;cursor:pointer;text-align:center}html.theme--catppuccin-mocha pre .copy-button:focus,html.theme--catppuccin-mocha pre .copy-button:hover{opacity:1;background:rgba(205,214,244,0.1);color:#89b4fa}html.theme--catppuccin-mocha pre .copy-button.success{color:#a6e3a1;opacity:1}html.theme--catppuccin-mocha pre .copy-button.error{color:#f38ba8;opacity:1}html.theme--catppuccin-mocha pre:hover .copy-button{opacity:1}html.theme--catppuccin-mocha .admonition{background-color:#181825;border-style:solid;border-width:2px;border-color:#bac2de;border-radius:4px;font-size:1rem}html.theme--catppuccin-mocha .admonition strong{color:currentColor}html.theme--catppuccin-mocha .admonition.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-mocha .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .admonition.is-default{background-color:#181825;border-color:#bac2de}html.theme--catppuccin-mocha .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#bac2de}html.theme--catppuccin-mocha .admonition.is-default>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-info{background-color:#181825;border-color:#94e2d5}html.theme--catppuccin-mocha .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#94e2d5}html.theme--catppuccin-mocha .admonition.is-info>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-success{background-color:#181825;border-color:#a6e3a1}html.theme--catppuccin-mocha .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6e3a1}html.theme--catppuccin-mocha .admonition.is-success>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-warning{background-color:#181825;border-color:#f9e2af}html.theme--catppuccin-mocha .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#f9e2af}html.theme--catppuccin-mocha .admonition.is-warning>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-danger{background-color:#181825;border-color:#f38ba8}html.theme--catppuccin-mocha .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#f38ba8}html.theme--catppuccin-mocha .admonition.is-danger>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-compat{background-color:#181825;border-color:#89dceb}html.theme--catppuccin-mocha .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#89dceb}html.theme--catppuccin-mocha .admonition.is-compat>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition-header{color:#bac2de;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-mocha .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-mocha details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-mocha details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-mocha details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-mocha .admonition-body{color:#cdd6f4;padding:0.5rem .75rem}html.theme--catppuccin-mocha .admonition-body pre{background-color:#181825}html.theme--catppuccin-mocha .admonition-body code{background-color:#181825}html.theme--catppuccin-mocha .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #585b70;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-mocha .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#181825;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #585b70;overflow:auto}html.theme--catppuccin-mocha .docstring>header code{background-color:transparent}html.theme--catppuccin-mocha .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-mocha .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-mocha .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-mocha .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #585b70}html.theme--catppuccin-mocha .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-mocha .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-mocha .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-mocha .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-mocha .documenter-example-output{background-color:#1e1e2e}html.theme--catppuccin-mocha .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#181825;color:#cdd6f4;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-mocha .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-mocha .outdated-warning-overlay a{color:#89b4fa}html.theme--catppuccin-mocha .outdated-warning-overlay a:hover{color:#89dceb}html.theme--catppuccin-mocha .content pre{border:2px solid #585b70;border-radius:4px}html.theme--catppuccin-mocha .content code{font-weight:inherit}html.theme--catppuccin-mocha .content a code{color:#89b4fa}html.theme--catppuccin-mocha .content a:hover code{color:#89dceb}html.theme--catppuccin-mocha .content h1 code,html.theme--catppuccin-mocha .content h2 code,html.theme--catppuccin-mocha .content h3 code,html.theme--catppuccin-mocha .content h4 code,html.theme--catppuccin-mocha .content h5 code,html.theme--catppuccin-mocha .content h6 code{color:#cdd6f4}html.theme--catppuccin-mocha .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-mocha .content blockquote>ul:first-child,html.theme--catppuccin-mocha .content blockquote>ol:first-child,html.theme--catppuccin-mocha .content .admonition-body>ul:first-child,html.theme--catppuccin-mocha .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-mocha pre,html.theme--catppuccin-mocha code{font-variant-ligatures:no-contextual}html.theme--catppuccin-mocha .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-mocha .breadcrumb a.is-disabled,html.theme--catppuccin-mocha .breadcrumb a.is-disabled:hover{color:#b8c5ef}html.theme--catppuccin-mocha .hljs{background:initial !important}html.theme--catppuccin-mocha .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-mocha .katex-display,html.theme--catppuccin-mocha mjx-container,html.theme--catppuccin-mocha .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-mocha html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-mocha li.no-marker{list-style:none}html.theme--catppuccin-mocha #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-mocha #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main{width:100%}html.theme--catppuccin-mocha #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-mocha #documenter .docs-main>header,html.theme--catppuccin-mocha #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar{background-color:#1e1e2e;border-bottom:1px solid #585b70;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-mocha #documenter .docs-main section.footnotes{border-top:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-mocha .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #585b70;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-mocha #documenter .docs-sidebar{display:flex;flex-direction:column;color:#cdd6f4;background-color:#181825;border-right:1px solid #585b70;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-mocha #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name a:hover{color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #585b70;display:none;padding:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #585b70;padding-bottom:1.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#cdd6f4;background:#181825}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#cdd6f4;background-color:#202031}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #585b70;border-bottom:1px solid #585b70;background-color:#11111b}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#11111b;color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#202031;color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-mocha #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#28283e}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#383856}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#28283e}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#383856}}html.theme--catppuccin-mocha kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-mocha .search-min-width-50{min-width:50%}html.theme--catppuccin-mocha .search-min-height-100{min-height:100%}html.theme--catppuccin-mocha .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-mocha .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover,html.theme--catppuccin-mocha .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-mocha .search-result-link .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-mocha .property-search-result-badge,html.theme--catppuccin-mocha .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-mocha .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:hover .search-filter,html.theme--catppuccin-mocha .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-mocha .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-mocha .search-filter:hover,html.theme--catppuccin-mocha .search-filter:focus{color:#333}html.theme--catppuccin-mocha .search-filter-selected{color:#313244;background-color:#b4befe}html.theme--catppuccin-mocha .search-filter-selected:hover,html.theme--catppuccin-mocha .search-filter-selected:focus{color:#313244}html.theme--catppuccin-mocha .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-mocha .search-divider{border-bottom:1px solid #585b70}html.theme--catppuccin-mocha .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-mocha .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-mocha .w-100{width:100%}html.theme--catppuccin-mocha .gap-2{gap:0.5rem}html.theme--catppuccin-mocha .gap-4{gap:1rem}html.theme--catppuccin-mocha .gap-8{gap:2rem}html.theme--catppuccin-mocha{background-color:#1e1e2e;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-mocha a{transition:all 200ms ease}html.theme--catppuccin-mocha .label{color:#cdd6f4}html.theme--catppuccin-mocha .button,html.theme--catppuccin-mocha .control.has-icons-left .icon,html.theme--catppuccin-mocha .control.has-icons-right .icon,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .select,html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea{height:2.5em;color:#cdd6f4}html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#cdd6f4}html.theme--catppuccin-mocha .select:after,html.theme--catppuccin-mocha .select select{border-width:1px}html.theme--catppuccin-mocha .menu-list a{transition:all 300ms ease}html.theme--catppuccin-mocha .modal-card-foot,html.theme--catppuccin-mocha .modal-card-head{border-color:#585b70}html.theme--catppuccin-mocha .navbar{border-radius:.4em}html.theme--catppuccin-mocha .navbar.is-transparent{background:none}html.theme--catppuccin-mocha .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .navbar .navbar-menu{background-color:#89b4fa;border-radius:0 0 .4em .4em}}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){color:#313244}html.theme--catppuccin-mocha .tag.is-link:not(body),html.theme--catppuccin-mocha .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-mocha .content kbd.is-link:not(body){color:#313244}html.theme--catppuccin-mocha .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-mocha .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-mocha .ansi span.sgr3{font-style:italic}html.theme--catppuccin-mocha .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-mocha .ansi span.sgr7{color:#1e1e2e;background-color:#cdd6f4}html.theme--catppuccin-mocha .ansi span.sgr8{color:transparent}html.theme--catppuccin-mocha .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-mocha .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-mocha .ansi span.sgr30{color:#45475a}html.theme--catppuccin-mocha .ansi span.sgr31{color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr32{color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr33{color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr34{color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr35{color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr36{color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr37{color:#bac2de}html.theme--catppuccin-mocha .ansi span.sgr40{background-color:#45475a}html.theme--catppuccin-mocha .ansi span.sgr41{background-color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr42{background-color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr43{background-color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr44{background-color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr45{background-color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr46{background-color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr47{background-color:#bac2de}html.theme--catppuccin-mocha .ansi span.sgr90{color:#585b70}html.theme--catppuccin-mocha .ansi span.sgr91{color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr92{color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr93{color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr94{color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr95{color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr96{color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr97{color:#a6adc8}html.theme--catppuccin-mocha .ansi span.sgr100{background-color:#585b70}html.theme--catppuccin-mocha .ansi span.sgr101{background-color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr102{background-color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr103{background-color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr104{background-color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr105{background-color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr106{background-color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr107{background-color:#a6adc8}html.theme--catppuccin-mocha code.language-julia-repl>span.hljs-meta{color:#a6e3a1;font-weight:bolder}html.theme--catppuccin-mocha code .hljs{color:#cdd6f4;background:#1e1e2e}html.theme--catppuccin-mocha code .hljs-keyword{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-built_in{color:#f38ba8}html.theme--catppuccin-mocha code .hljs-type{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-literal{color:#fab387}html.theme--catppuccin-mocha code .hljs-number{color:#fab387}html.theme--catppuccin-mocha code .hljs-operator{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-punctuation{color:#bac2de}html.theme--catppuccin-mocha code .hljs-property{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-regexp{color:#f5c2e7}html.theme--catppuccin-mocha code .hljs-string{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-char.escape_{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-subst{color:#a6adc8}html.theme--catppuccin-mocha code .hljs-symbol{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-variable{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-variable.language_{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-variable.constant_{color:#fab387}html.theme--catppuccin-mocha code .hljs-title{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-title.class_{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-title.function_{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-params{color:#cdd6f4}html.theme--catppuccin-mocha code .hljs-comment{color:#585b70}html.theme--catppuccin-mocha code .hljs-doctag{color:#f38ba8}html.theme--catppuccin-mocha code .hljs-meta{color:#fab387}html.theme--catppuccin-mocha code .hljs-section{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-tag{color:#a6adc8}html.theme--catppuccin-mocha code .hljs-name{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-attr{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-attribute{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-bullet{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-code{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-emphasis{color:#f38ba8;font-style:italic}html.theme--catppuccin-mocha code .hljs-strong{color:#f38ba8;font-weight:bold}html.theme--catppuccin-mocha code .hljs-formula{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-link{color:#74c7ec;font-style:italic}html.theme--catppuccin-mocha code .hljs-quote{color:#a6e3a1;font-style:italic}html.theme--catppuccin-mocha code .hljs-selector-tag{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-selector-id{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-selector-class{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-selector-attr{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-selector-pseudo{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-template-tag{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-template-variable{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-addition{color:#a6e3a1;background:rgba(166,227,161,0.15)}html.theme--catppuccin-mocha code .hljs-deletion{color:#f38ba8;background:rgba(243,139,168,0.15)}html.theme--catppuccin-mocha .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover,html.theme--catppuccin-mocha .search-result-link:focus{background-color:#313244}html.theme--catppuccin-mocha .search-result-link .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:hover .search-filter,html.theme--catppuccin-mocha .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:focus .search-filter{color:#313244 !important;background-color:#b4befe !important}html.theme--catppuccin-mocha .search-result-title{color:#cdd6f4}html.theme--catppuccin-mocha .search-result-highlight{background-color:#f38ba8;color:#181825}html.theme--catppuccin-mocha .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-mocha .w-100{width:100%}html.theme--catppuccin-mocha .gap-2{gap:0.5rem}html.theme--catppuccin-mocha .gap-4{gap:1rem} diff --git a/previews/PR306/assets/themes/documenter-dark.css b/previews/PR306/assets/themes/documenter-dark.css new file mode 100644 index 00000000..2892b385 --- /dev/null +++ b/previews/PR306/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#3c5dcd !important}a.has-text-info:hover,a.has-text-info:focus{color:#2c48aa !important}.has-background-info{background-color:#3c5dcd !important}.has-text-info-light{color:#eff2fb !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c6d0f0 !important}.has-background-info-light{background-color:#eff2fb !important}.has-text-info-dark{color:#3253c3 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#5571d3 !important}.has-background-info-dark{background-color:#3253c3 !important}.has-text-success{color:#259a12 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a6c0d !important}.has-background-success{background-color:#259a12 !important}.has-text-success-light{color:#effded !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c7f8bf !important}.has-background-success-light{background-color:#effded !important}.has-text-success-dark{color:#2ec016 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#3fe524 !important}.has-background-success-dark{background-color:#2ec016 !important}.has-text-warning{color:#f4c72f !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#e4b30c !important}.has-background-warning{background-color:#f4c72f !important}.has-text-warning-light{color:#fefaec !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fbedbb !important}.has-background-warning-light{background-color:#fefaec !important}.has-text-warning-dark{color:#8c6e07 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#bd940a !important}.has-background-warning-dark{background-color:#8c6e07 !important}.has-text-danger{color:#cb3c33 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a23029 !important}.has-background-danger{background-color:#cb3c33 !important}.has-text-danger-light{color:#fbefef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f1c8c6 !important}.has-background-danger-light{background-color:#fbefef !important}.has-text-danger-dark{color:#c03930 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#d35850 !important}.has-background-danger-dark{background-color:#c03930 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#3c5dcd;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#3355c9;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#3151bf;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#3c5dcd;border-color:#3c5dcd;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;box-shadow:none;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#e5e9f8;border-color:transparent;color:#3253c3}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#dae1f6;border-color:transparent;color:#3253c3}html.theme--documenter-dark .button.is-success{background-color:#259a12;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#228f11;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#20830f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#259a12;border-color:#259a12;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#259a12}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#259a12;color:#259a12}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#259a12;border-color:#259a12;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #259a12 #259a12 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#259a12;box-shadow:none;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #259a12 #259a12 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#effded;color:#2ec016}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#e5fce1;border-color:transparent;color:#2ec016}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#dbfad6;border-color:transparent;color:#2ec016}html.theme--documenter-dark .button.is-warning{background-color:#f4c72f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#f3c423;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#f3c017;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#f4c72f;border-color:#f4c72f;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#f4c72f;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#f4c72f;border-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #f4c72f #f4c72f !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#f4c72f;box-shadow:none;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f4c72f #f4c72f !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fdf7e0;border-color:transparent;color:#8c6e07}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fdf3d3;border-color:transparent;color:#8c6e07}html.theme--documenter-dark .button.is-danger{background-color:#cb3c33;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#c13930;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#b7362e;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#cb3c33;border-color:#cb3c33;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#cb3c33;border-color:#cb3c33;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;box-shadow:none;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fbefef;color:#c03930}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#f8e6e5;border-color:transparent;color:#c03930}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#f6dcda;border-color:transparent;color:#c03930}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .notification.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#effded;color:#2ec016}html.theme--documenter-dark .notification.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .notification.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fbefef;color:#c03930}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #3c5dcd 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#259a12}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#259a12}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#259a12}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #259a12 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #f4c72f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #cb3c33 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#259a12;border-color:#259a12;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#f4c72f;border-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#cb3c33;border-color:#cb3c33;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#259a12;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#effded;color:#2ec016}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#cb3c33;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fbefef;color:#c03930}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#3c5dcd}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#259a12}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#f4c72f}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#cb3c33}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#3c5dcd}html.theme--documenter-dark .select.is-info select{border-color:#3c5dcd}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#3151bf}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#259a12}html.theme--documenter-dark .select.is-success select{border-color:#259a12}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#20830f}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#f4c72f}html.theme--documenter-dark .select.is-warning select{border-color:#f4c72f}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#f3c017}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#cb3c33}html.theme--documenter-dark .select.is-danger select{border-color:#cb3c33}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#b7362e}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#3c5dcd;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#3355c9;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(60,93,205,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#3151bf;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#259a12;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#228f11;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(37,154,18,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#20830f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#f4c72f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#f3c423;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(244,199,47,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#f3c017;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#cb3c33;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#c13930;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(203,60,51,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#b7362e;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#3c5dcd}html.theme--documenter-dark .help.is-success{color:#259a12}html.theme--documenter-dark .help.is-warning{color:#f4c72f}html.theme--documenter-dark .help.is-danger{color:#cb3c33}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#eff2fb}html.theme--documenter-dark .message.is-info .message-header{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#3c5dcd;color:#3253c3}html.theme--documenter-dark .message.is-success{background-color:#effded}html.theme--documenter-dark .message.is-success .message-header{background-color:#259a12;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#259a12;color:#2ec016}html.theme--documenter-dark .message.is-warning{background-color:#fefaec}html.theme--documenter-dark .message.is-warning .message-header{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-warning .message-body{border-color:#f4c72f;color:#8c6e07}html.theme--documenter-dark .message.is-danger{background-color:#fbefef}html.theme--documenter-dark .message.is-danger .message-header{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#cb3c33;color:#c03930}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3c5dcd;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#259a12;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#f4c72f;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#cb3c33;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#3c5dcd}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#3c5dcd}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#259a12;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#259a12}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#259a12}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#f4c72f}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#f4c72f}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#cb3c33}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#cb3c33}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#3c5dcd}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#3c5dcd !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3c5dcd}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#259a12}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#259a12 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#259a12}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#f4c72f}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#f4c72f !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #f09100 0%, #f4c72f 71%, #faef42 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f09100 0%, #f4c72f 71%, #faef42 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#cb3c33}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#cb3c33 !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#cb3c33}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#5a76d5}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#3c5dcd;box-shadow:0 0 0 2px rgba(60,93,205,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#2dbc16}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#259a12;box-shadow:0 0 0 2px rgba(37,154,18,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#f6d153}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#f4c72f;box-shadow:0 0 0 2px rgba(244,199,47,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#d35951}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#cb3c33;box-shadow:0 0 0 2px rgba(203,60,51,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:2px;border-color:#dbdee0;border-radius:4px;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#dbdee0}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#3c5dcd}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#3c5dcd}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#259a12}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#259a12}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#f4c72f}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#f4c72f}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#cb3c33}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#cb3c33}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#3489da}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#3489da}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#dbdee0;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #5e6d6f;border-radius:4px;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:2px solid #5e6d6f;border-radius:4px}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content a:hover code{color:#1dd2af}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/previews/PR306/assets/themes/documenter-light.css b/previews/PR306/assets/themes/documenter-light.css new file mode 100644 index 00000000..a435b3b6 --- /dev/null +++ b/previews/PR306/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#3c5dcd !important}a.has-text-info:hover,a.has-text-info:focus{color:#2c48aa !important}.has-background-info{background-color:#3c5dcd !important}.has-text-info-light{color:#eff2fb !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c6d0f0 !important}.has-background-info-light{background-color:#eff2fb !important}.has-text-info-dark{color:#3253c3 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#5571d3 !important}.has-background-info-dark{background-color:#3253c3 !important}.has-text-success{color:#259a12 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a6c0d !important}.has-background-success{background-color:#259a12 !important}.has-text-success-light{color:#effded !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c7f8bf !important}.has-background-success-light{background-color:#effded !important}.has-text-success-dark{color:#2ec016 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#3fe524 !important}.has-background-success-dark{background-color:#2ec016 !important}.has-text-warning{color:#a98800 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#765f00 !important}.has-background-warning{background-color:#a98800 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#cca400 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffcd00 !important}.has-background-warning-dark{background-color:#cca400 !important}.has-text-danger{color:#cb3c33 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a23029 !important}.has-background-danger{background-color:#cb3c33 !important}.has-text-danger-light{color:#fbefef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f1c8c6 !important}.has-background-danger-light{background-color:#fbefef !important}.has-text-danger-dark{color:#c03930 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#d35850 !important}.has-background-danger-dark{background-color:#c03930 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#3c5dcd;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#3355c9;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#3151bf;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3c5dcd;border-color:#3c5dcd;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3c5dcd}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3c5dcd}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;color:#3c5dcd}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;box-shadow:none;color:#3c5dcd}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#3c5dcd}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eff2fb;color:#3253c3}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e5e9f8;border-color:transparent;color:#3253c3}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#dae1f6;border-color:transparent;color:#3253c3}.button.is-success{background-color:#259a12;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#228f11;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#20830f;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#259a12;border-color:#259a12;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#259a12}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#259a12}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#259a12;color:#259a12}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#259a12;border-color:#259a12;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #259a12 #259a12 !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#259a12;box-shadow:none;color:#259a12}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#259a12}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #259a12 #259a12 !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effded;color:#2ec016}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e5fce1;border-color:transparent;color:#2ec016}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#dbfad6;border-color:transparent;color:#2ec016}.button.is-warning{background-color:#a98800;border-color:transparent;color:#fff}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#9c7d00;border-color:transparent;color:#fff}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:#fff}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#8f7300;border-color:transparent;color:#fff}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#a98800;border-color:#a98800;box-shadow:none}.button.is-warning.is-inverted{background-color:#fff;color:#a98800}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#a98800}.button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#a98800;color:#a98800}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#a98800;border-color:#a98800;color:#fff}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #a98800 #a98800 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#a98800;box-shadow:none;color:#a98800}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#a98800}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a98800 #a98800 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning.is-light{background-color:#fffbeb;color:#cca400}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff9de;border-color:transparent;color:#cca400}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#cca400}.button.is-danger{background-color:#cb3c33;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#c13930;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#b7362e;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#cb3c33;border-color:#cb3c33;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#cb3c33}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#cb3c33}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;color:#cb3c33}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#cb3c33;border-color:#cb3c33;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;box-shadow:none;color:#cb3c33}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#cb3c33}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#fbefef;color:#c03930}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#f8e6e5;border-color:transparent;color:#c03930}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#f6dcda;border-color:transparent;color:#c03930}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#3c5dcd;color:#fff}.notification.is-info.is-light{background-color:#eff2fb;color:#3253c3}.notification.is-success{background-color:#259a12;color:#fff}.notification.is-success.is-light{background-color:#effded;color:#2ec016}.notification.is-warning{background-color:#a98800;color:#fff}.notification.is-warning.is-light{background-color:#fffbeb;color:#cca400}.notification.is-danger{background-color:#cb3c33;color:#fff}.notification.is-danger.is-light{background-color:#fbefef;color:#c03930}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3c5dcd}.progress.is-info::-moz-progress-bar{background-color:#3c5dcd}.progress.is-info::-ms-fill{background-color:#3c5dcd}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #3c5dcd 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#259a12}.progress.is-success::-moz-progress-bar{background-color:#259a12}.progress.is-success::-ms-fill{background-color:#259a12}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #259a12 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#a98800}.progress.is-warning::-moz-progress-bar{background-color:#a98800}.progress.is-warning::-ms-fill{background-color:#a98800}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #a98800 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#cb3c33}.progress.is-danger::-moz-progress-bar{background-color:#cb3c33}.progress.is-danger::-ms-fill{background-color:#cb3c33}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #cb3c33 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}.table td.is-success,.table th.is-success{background-color:#259a12;border-color:#259a12;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#a98800;border-color:#a98800;color:#fff}.table td.is-danger,.table th.is-danger{background-color:#cb3c33;border-color:#cb3c33;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#3c5dcd;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#eff2fb;color:#3253c3}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#259a12;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#effded;color:#2ec016}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#a98800;color:#fff}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#cca400}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#cb3c33;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fbefef;color:#c03930}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#3c5dcd}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#259a12}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#a98800}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#cb3c33}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#3c5dcd}.select.is-info select{border-color:#3c5dcd}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#3151bf}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.select.is-success:not(:hover)::after{border-color:#259a12}.select.is-success select{border-color:#259a12}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#20830f}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.select.is-warning:not(:hover)::after{border-color:#a98800}.select.is-warning select{border-color:#a98800}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#8f7300}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.select.is-danger:not(:hover)::after{border-color:#cb3c33}.select.is-danger select{border-color:#cb3c33}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#b7362e}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3c5dcd;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#3355c9;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(60,93,205,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#3151bf;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#259a12;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#228f11;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(37,154,18,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#20830f;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#a98800;border-color:transparent;color:#fff}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#9c7d00;border-color:transparent;color:#fff}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(169,136,0,0.25);color:#fff}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#8f7300;border-color:transparent;color:#fff}.file.is-danger .file-cta{background-color:#cb3c33;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#c13930;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(203,60,51,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#b7362e;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#3c5dcd}.help.is-success{color:#259a12}.help.is-warning{color:#a98800}.help.is-danger{color:#cb3c33}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#eff2fb}.message.is-info .message-header{background-color:#3c5dcd;color:#fff}.message.is-info .message-body{border-color:#3c5dcd;color:#3253c3}.message.is-success{background-color:#effded}.message.is-success .message-header{background-color:#259a12;color:#fff}.message.is-success .message-body{border-color:#259a12;color:#2ec016}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#a98800;color:#fff}.message.is-warning .message-body{border-color:#a98800;color:#cca400}.message.is-danger{background-color:#fbefef}.message.is-danger .message-header{background-color:#cb3c33;color:#fff}.message.is-danger .message-body{border-color:#cb3c33;color:#c03930}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#3c5dcd;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#3151bf;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#3151bf;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#3151bf;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3c5dcd;color:#fff}}.navbar.is-success{background-color:#259a12;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#20830f;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#20830f;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#20830f;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#259a12;color:#fff}}.navbar.is-warning{background-color:#a98800;color:#fff}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:#fff}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:#fff}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#a98800;color:#fff}}.navbar.is-danger{background-color:#cb3c33;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#b7362e;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#b7362e;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#b7362e;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#cb3c33;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#3c5dcd;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3c5dcd}.panel.is-info .panel-block.is-active .panel-icon{color:#3c5dcd}.panel.is-success .panel-heading{background-color:#259a12;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#259a12}.panel.is-success .panel-block.is-active .panel-icon{color:#259a12}.panel.is-warning .panel-heading{background-color:#a98800;color:#fff}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#a98800}.panel.is-warning .panel-block.is-active .panel-icon{color:#a98800}.panel.is-danger .panel-heading{background-color:#cb3c33;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#cb3c33}.panel.is-danger .panel-block.is-active .panel-icon{color:#cb3c33}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#3c5dcd;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#3c5dcd}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#3151bf;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#3c5dcd !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3c5dcd}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}}.hero.is-success{background-color:#259a12;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#259a12}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#20830f;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#259a12 !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#259a12}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}}.hero.is-warning{background-color:#a98800;color:#fff}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:#fff}.hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#a98800}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#8f7300;color:#fff}.hero.is-warning .tabs a{color:#fff;opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#a98800 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:#fff}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#a98800}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #764b00 0%, #a98800 71%, #c2bd00 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #764b00 0%, #a98800 71%, #c2bd00 100%)}}.hero.is-danger{background-color:#cb3c33;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#cb3c33}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#b7362e;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#cb3c33 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#cb3c33}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#f5f5f5;border-style:solid;border-width:2px;border-color:#4a4a4a;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#f5f5f5;border-color:#4a4a4a}.admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#4a4a4a}.admonition.is-default>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-info{background-color:#f5f5f5;border-color:#3c5dcd}.admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#3c5dcd}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#f5f5f5;border-color:#259a12}.admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#259a12}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#f5f5f5;border-color:#a98800}.admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#a98800}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#f5f5f5;border-color:#cb3c33}.admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#cb3c33}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#f5f5f5;border-color:#3489da}.admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#3489da}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#4a4a4a;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #dbdbdb;border-radius:4px;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#f5f5f5;color:rgba(0,0,0,0.7);border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:2px solid #dbdbdb;border-radius:4px}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content a:hover code{color:#363636}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/previews/PR306/assets/themeswap.js b/previews/PR306/assets/themeswap.js new file mode 100644 index 00000000..9f5eebe6 --- /dev/null +++ b/previews/PR306/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/previews/PR306/assets/warner.js b/previews/PR306/assets/warner.js new file mode 100644 index 00000000..3f6f5d00 --- /dev/null +++ b/previews/PR306/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/previews/PR306/index.html b/previews/PR306/index.html new file mode 100644 index 00000000..3e7cf096 --- /dev/null +++ b/previews/PR306/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

MathematicalSystems.jl

MathematicalSystems is a Julia package for mathematical systems interfaces.

Features

  • Generic and flexible systems definitions, while being fast and type stable.
  • Types for mathematical systems modeling: continuous, discrete, controlled, descriptor systems, etc.
  • Iterator interfaces to handle constant or time-varying inputs.

Ecosystem

The following packages use MathematicalSystems.jl:

Manual Outline

Library Outline

diff --git a/previews/PR306/lib/internals/index.html b/previews/PR306/lib/internals/index.html new file mode 100644 index 00000000..04d89352 --- /dev/null +++ b/previews/PR306/lib/internals/index.html @@ -0,0 +1,60 @@ + +Internals · MathematicalSystems.jl

Internals

This section describes functions that are internal to the library.

Expression Handling

MathematicalSystems._corresponding_typeFunction
_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

Return the system type whose field names match those in fields.

Input

  • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
  • fields – tuple of field names

Output

The system type (either discrete or continuous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

Examples

julia> using MathematicalSystems: _corresponding_type
+
+julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
+LinearContinuousSystem
+
+julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
+ConstrainedLinearControlContinuousSystem
source
MathematicalSystems._capture_dimFunction
_capture_dim(expr)

Return the tuple containing the dimension(s) in expr.

Input

  • expr – symbolic expression that can be of any of the following forms:

    • :x or :(x) – state dimension
    • :(x, u) – state and input dimension
    • :(x, u, w) – state, input and noise dimensions

Output

  • The scalar x if expr specifies the state dimension.
  • The vector [x, u] if expr specifies state and input dimension.
  • The vector [x, u, w] if expr specifies state, input and noise dimensions.
source
MathematicalSystems.extract_dyn_equation_parametersFunction
extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

  • (:A_user, :A)
  • (:B_user, :B)
  • (:c_user, :c)
  • (:D_user, :D)
  • (:f_user, :f)
  • (:statedim_user :statedim)
  • (:inputdim_user :inputdim)
  • (:noisedim_user :noisedim)

and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

Input

  • equation – dynamic equation
  • state – state variable
  • input – input variable
  • noise – noise variable
  • dim – dimensionality
  • AT – abstract system type

Output

Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

source
MathematicalSystems.add_asteriskFunction
add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

Input

  • summand – expressions
  • state – state variable
  • input – input variable
  • noise – noise variable

Output

Multiplication expression or symbol.

Example

julia> using MathematicalSystems: add_asterisk
+
+julia> add_asterisk(:(A1*x), :x, :u, :w)
+:(A1 * x)
+
+julia> add_asterisk(:(c1), :x, :u, :w)
+:c1
+
+julia> add_asterisk(:(Ax1), :x1, :u, :w)
+:(A * x1)
+
+julia> add_asterisk(:(Awb), :x1, :u, :wb)
+:(A * wb)
+
+julia> add_asterisk(:(A1u), :x, :u, :w)
+:(A1 * u)
+
+julia> add_asterisk(:(A1ub), :x, :u, :w)
+:A1ub
source
MathematicalSystems._sortFunction
_sort(parameters::Vector, order::Tuple)

Filter and sort the vector parameters according to order.

Input

  • parameters – vector of tuples
  • order – tuple of symbols

Output

A new vector of tuples corresponding to parameters filtered and sorted according to order.

Examples

julia> using MathematicalSystems: _sort
+
+julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
+
+julia> _sort(parameters, (:X, :U, :W))
+3-element Vector{Tuple{Any, Symbol}}:
+ (:X1, :X)
+ (:U1, :U)
+ (:W1, :W)
+
+julia>  parameters = [(:const, :c), (:A, :A)];
+
+julia> _sort(parameters, (:A, :B, :c, :D))
+2-element Vector{Tuple{Any, Symbol}}:
+ (:A, :A)
+ (:const, :c)

Notes

parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

source

Querying Expressions

MathematicalSystems.is_equationFunction
is_equation(expr)

Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

Input

  • expr – expression

Output

A Bool indicating whether expr is an equation or not.

source
MathematicalSystems.extract_sumFunction
extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

Input

  • summands – array of expressions
  • state – state variable
  • input – input variable
  • noise – noise variable

Output

Array of tuples of symbols with variable name and field name.

Example

julia> using MathematicalSystems: extract_sum
+
+julia> extract_sum([:(A1*x)], :x, :u, :w)
+1-element Vector{Tuple{Any, Symbol}}:
+ (:(hcat(A1)), :A)
+
+julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
+3-element Vector{Tuple{Any, Symbol}}:
+ (:(hcat(A1)), :A)
+ (:(hcat(B1)), :B)
+ (:(vcat(c)), :c)
+
+julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
+3-element Vector{Tuple{Any, Symbol}}:
+ (:(hcat(A1)), :A)
+ (:(hcat(B1)), :B)
+ (:(hcat(B2)), :D)

Notes

If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

source

Evaluation of AbstractSystem at Given State

MathematicalSystems._instantiateFunction
_instantiate(system::AbstractSystem, x::AbstractVector;
+            [check_constraints]=true)

Return the result of instantiating an AbstractSystem at the current state.

Input

  • systemAbstractSystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x.

Notes

The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

source
_instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;
+            [check_constraints]=true)

Return the result of instantiating an AbstractSystem at the current state and applying one input.

Input

  • systemAbstractSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type) or noise, if system is not controlled
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x and input u.

Notes

If the system is not controlled but noisy, the input u is interpreted as noise.

The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

source
_instantiate(system::AbstractSystem,
+            x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

Return the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.

Input

  • systemAbstractSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type)
  • w – noise (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x, input u and noise w.

Notes

The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

source

Naming Convention for Systems' Fields

Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

FieldDescriptionGetter function
Astate matrixstate_matrix
Binput matrixinput_matrix
caffine termaffine_term
Dnoise matrixnoise_matrix
Xstate constraintsstateset
Uinput constraintsinputset
Wdisturbance setnoiseset
diff --git a/previews/PR306/lib/methods/index.html b/previews/PR306/lib/methods/index.html new file mode 100644 index 00000000..7ee75841 --- /dev/null +++ b/previews/PR306/lib/methods/index.html @@ -0,0 +1,17 @@ + +Methods · MathematicalSystems.jl

Methods

This section describes systems methods implemented in MathematicalSystems.jl.

States

Inputs

MathematicalSystems.nextinputFunction
nextinput(input::ConstantInput, n::Int=1)

Returns the first n elements of this input.

Input

  • input – a constant input
  • n – (optional, default: 1) the number of desired elements

Output

A repeated iterator that generates n equal samples of this input.

source
nextinput(input::VaryingInput, n::Int=1)

Returns the first n elements of this input.

Input

  • input – varying input
  • n – (optional, default: 1) number of desired elements

Output

An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

source

Noises

Output

Traits

MathematicalSystems.islinearMethod
islinear(s::AbstractSystem)

Determines whether the dynamics of system s is specified by linear equations.

Notes

We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

source
MathematicalSystems.islinearMethod
islinear(m::AbstractMap)

Determines whether the map m is linear or not.

Notes

A map is linear if it preserves the operations of scalar multiplication and vector addition.

source
MathematicalSystems.isaffineMethod
isaffine(s::AbstractSystem)

Determines whether the dynamics of system s is specified by affine equations.

Notes

An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

source
MathematicalSystems.ispolynomialMethod
ispolynomial(s::AbstractSystem)

Determines whether the dynamics of system s is specified by polynomial equations.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

source
MathematicalSystems.isblackboxMethod
isblackbox(s::AbstractSystem)

Determines whether no specific structure is assumed for the dynamics of system s.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

source
MathematicalSystems.isnoisyMethod
isnoisy(s::AbstractSystem)

Determines if the dynamics of system s contains a noise term w.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

source
MathematicalSystems.iscontrolledMethod
iscontrolled(s::AbstractSystem)

Determines if the dynamics of system s contains a control input u.

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

source
MathematicalSystems.isconstrainedMethod
isconstrained(s::AbstractSystem)

Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

source
MathematicalSystems.state_matrixMethod
state_matrix(s::AbstractSystem)

Returns the state matrix of an affine system.

Notes

The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

source
MathematicalSystems.input_matrixMethod
input_matrix(s::AbstractSystem)

Returns the input matrix of a system with linear input.

Notes

The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

source
MathematicalSystems.noise_matrixMethod
noise_matrix(s::AbstractSystem)

Returns the noise matrix of a system with linear noise.

Notes

The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

source
MathematicalSystems.affine_termMethod
affine_term(s::AbstractSystem)

Returns the affine term in an affine system.

Notes

The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

source

Maps

Successor

MathematicalSystems.successorFunction
successor(system::DiscreteIdentitySystem, x::AbstractVector)

Return the successor state of a DiscreteIdentitySystem.

Input

  • systemDiscreteIdentitySystem
  • x – state (it should be any vector type)

Output

The same state x.

source
successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
+          [check_constraints]=true)

Return the successor state of a ConstrainedDiscreteIdentitySystem.

Input

  • systemConstrainedDiscreteIdentitySystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The same state x.

source
successor(system::AbstractDiscreteSystem, x::AbstractVector;
+          [check_constraints]=true)

Return the successor state of an AbstractDiscreteSystem.

Input

  • systemAbstractDiscreteSystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x.

source
successor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;
+          [check_constraints]=true)

Return the successor state of an AbstractDiscreteSystem.

Input

  • systemAbstractDiscreteSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type) or noise, if system is not controlled
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x and input u.

Notes

If the system is not controlled but noisy, the input u is interpreted as noise.

source
successor(system::AbstractDiscreteSystem,
+          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

Return the successor state of an AbstractDiscreteSystem.

Input

  • systemAbstractDiscreteSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type)
  • w – noise (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The result of applying the system to state x, input u and noise w.

source

Vector Field

MathematicalSystems.vector_fieldFunction
vector_field(system::ContinuousIdentitySystem, x::AbstractVector)

Return the vector field state of a ContinuousIdentitySystem.

Input

  • systemContinuousIdentitySystem
  • x – state (it should be any vector type)

Output

A zeros vector of dimension statedim.

source
vector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;
+          [check_constraints]=true)

Return the vector field state of a ConstrainedContinuousIdentitySystem.

Input

  • systemConstrainedContinuousIdentitySystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

A zeros vector of dimension statedim.

source
vector_field(system::AbstractContinuousSystem, x::AbstractVector;
+          [check_constraints]=true)

Return the vector field state of an AbstractContinuousSystem.

Input

  • systemAbstractContinuousSystem
  • x – state (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The vector field of the system at state x.

source
vector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;
+          [check_constraints]=true)

Return the vector field state of an AbstractContinuousSystem.

Input

  • systemAbstractContinuousSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type) or noise, if system is not controlled
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The vector field of the system at state x and applying input u.

Notes

If the system is not controlled but noisy, the input u is interpreted as noise.

source
vector_field(system::AbstractContinuousSystem,
+          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

Return the vector field state of an AbstractContinuousSystem.

Input

  • systemAbstractContinuousSystem
  • x – state (it should be any vector type)
  • u – input (it should be any vector type)
  • w – noise (it should be any vector type)
  • check_constraints – (optional, default: true) check if the state belongs to the state set

Output

The vector field of the system at state x and applying input u and noise w.

source

Discretization

MathematicalSystems.discretizeFunction
discretize(system::AbstractContinuousSystem, ΔT::Real,
+           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
+           constructor=_default_complementary_constructor(system))

Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

Input

  • system – an affine continuous system
  • ΔT – sampling time
  • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
  • constructor – (optional, default: _default_complementary_constructor(system)) construction method

Output

Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

source

Internal Methods

MathematicalSystems._discretizeFunction
_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
+            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

Input

  • `` – discretization algorithm, used for dispatch
  • ΔT – sampling time
  • A – state matrix
  • B – input matrix
  • c – vector
  • D – noise matrix

Output

Returns a vector containing the discretized input arguments A, B, c and D.

Notes

See discretize for more details.

source
_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

Input

  • A – state matrix
  • ΔT – sampling time
  • algorithm – (optional, default: :exact) discretization algorithm

Output

Returns a vector containing the discretized input argument A.

Notes

See discretize for more details.

source
_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
+            A::AbstractMatrix, B::AbstractMatrix)

Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

Input

  • algorithm – discretization algorithm
  • ΔT – sampling time
  • A – state matrix
  • B – input or noise matrix

Output

Returns a vector containing the discretized input arguments A and B.

Notes

This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

See discretize for more details.

source
_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
+            A::AbstractMatrix,c::AbstractVector)

Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

Input

  • algorithm – discretization algorithm
  • ΔT – sampling time
  • A – state matrix
  • c – vector

Output

Returns a vector containing the discretized input arguments A and c.

Notes

See discretize for more details.

source
_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
+            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

Input

  • algorithm – discretization algorithm
  • ΔT – sampling time
  • A – state matrix
  • B – input matrix
  • c – vector

Output

Returns a vector containing the discretized input arguments A, B and c.

Notes

See discretize for more details.

source
_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
+            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

Input

  • algorithm – discretization algorithm
  • ΔT – sampling time
  • A – state matrix
  • B – input matrix
  • D – noise matrix

Output

Returns a vector containing the discretized input arguments A, B and D.

Notes

See discretize for more details.

source
MathematicalSystems.typenameMethod
typename(system::AbstractSystem)

Returns the base type of system without parameter information.

Input

  • systemAbstractSystem

Output

The base type of system.

source
MathematicalSystems._complementary_typeMethod
_complementary_type(system_type::Type{<:AbstractSystem})

Return the complementary type of a system type system_type.

Input

  • system_type – type of AbstractSystem

Output

The complementary type of system_type.

Notes

There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

To get the complementary type of system type, use _complementary_type(typename(system)).

source
diff --git a/previews/PR306/lib/types/index.html b/previews/PR306/lib/types/index.html new file mode 100644 index 00000000..6f0c1be5 --- /dev/null +++ b/previews/PR306/lib/types/index.html @@ -0,0 +1,125 @@ + +Types · MathematicalSystems.jl

Types

This section describes systems types implemented in MathematicalSystems.jl.

Abstract Systems

Continuous Systems

MathematicalSystems.ConstrainedContinuousIdentitySystemType
ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

Trivial identity continuous-time system with domain constraints of the form:

\[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

Fields

  • statedim – number of state variables
  • X – state constraints
source
MathematicalSystems.ConstrainedAffineControlContinuousSystemType
ConstrainedAffineControlContinuousSystem

Continuous-time affine control system with domain constraints of the form:

\[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ConstrainedLinearControlContinuousSystemType
ConstrainedLinearControlContinuousSystem

Continuous-time linear control system with domain constraints of the form:

\[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ConstrainedPolynomialContinuousSystemType
ConstrainedPolynomialContinuousSystem

Continuous-time polynomial system with domain constraints:

\[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

Fields

  • p – polynomial vector field
  • X – constraint set
  • statedim – number of state variables
source
MathematicalSystems.BlackBoxContinuousSystemType
BlackBoxContinuousSystem <: AbstractContinuousSystem

Continuous-time system defined by a right-hand side of the form:

\[ x(t)' = f(x(t)) \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
source
MathematicalSystems.ConstrainedBlackBoxContinuousSystemType
ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

Continuous-time system defined by a right-hand side with domain constraints of the form:

\[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • X – state constraints
source
MathematicalSystems.BlackBoxControlContinuousSystemType
BlackBoxControlContinuousSystem <: AbstractContinuousSystem

Continuous-time control system defined by a right-hand side of the form:

\[ x(t)' = f(x(t), u(t)) \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
source
MathematicalSystems.ConstrainedBlackBoxControlContinuousSystemType
ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

Continuous-time control system defined by a right-hand side with domain constraints of the form:

\[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.NoisyConstrainedLinearContinuousSystemType
NoisyConstrainedLinearContinuousSystem

Continuous-time linear system with additive disturbance and domain constraints of the form:

\[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

Fields

  • A – state matrix
  • D – noise matrix
  • X – state constraints
  • W – disturbance set
source
MathematicalSystems.NoisyConstrainedLinearControlContinuousSystemType
NoisyConstrainedLinearControlContinuousSystem

Continuous-time linear control system with additive disturbance and domain constraints of the form:

\[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • D – noise matrix
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.NoisyAffineControlContinuousSystemType
NoisyAffineControlContinuousSystem

Continuous-time affine control system with additive disturbance of the form:

\[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • D – noise matrix
source
MathematicalSystems.NoisyConstrainedAffineControlContinuousSystemType
NoisyConstrainedAffineControlContinuousSystem

Continuous-time affine control system with additive disturbance and domain constraints of the form:

\[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • D – noise matrix
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.NoisyBlackBoxControlContinuousSystemType
NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

Continuous-time disturbance-affected control system defined by a right-hand side of the form:

\[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • noisedim – number of noise variables
source
MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystemType
NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

\[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • noisedim – number of noise variables
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystemType
SecondOrderConstrainedAffineControlContinuousSystem

Continuous-time second order constrained affine control system of the form:

\[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t) + d, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • K – stiffness matrix
  • B – input matrix
  • d – affine term
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystemType
SecondOrderConstrainedLinearControlContinuousSystem

Continuous-time second order constrained linear control system of the form:

\[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • K – stiffness matrix
  • B – input matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.SecondOrderContinuousSystemType
SecondOrderContinuousSystem

Continuous-time second-order system of the form:

\[ Mx''(t) + Cx'(t) + f_i(x) = f_e(t) \forall t\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • fi – internal forces
  • fe – external forces

Notes

Typically fi(x) is a state-dependent function, and fe is a given vector. In this implementation, their respective types, FI and FE, are generic.

source
MathematicalSystems.SecondOrderConstrainedContinuousSystemType
SecondOrderConstrainedContinuousSystem

Continuous-time constrained second-order system of the form:

\[ Mx''(t) + Cx'(t) + f_i(x) = f_e(t) \forall t, x ∈ X, f_e(t) ∈ U\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • fi – internal forces
  • fe – external forces
  • X – state set
  • U – input set
source

Discrete Systems

MathematicalSystems.ConstrainedDiscreteIdentitySystemType
ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

Trivial identity discrete-time system with domain constraints of the form:

\[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

Fields

  • statedim – number of state variables
  • X – state constraints
source
MathematicalSystems.ConstrainedAffineDiscreteSystemType
ConstrainedAffineDiscreteSystem

Discrete-time affine system with domain constraints of the form:

\[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

Fields

  • A – state matrix
  • c – affine term
  • X – state constraints
source
MathematicalSystems.ConstrainedLinearControlDiscreteSystemType
ConstrainedLinearControlDiscreteSystem

Discrete-time linear control system with domain constraints of the form:

\[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ConstrainedAffineControlDiscreteSystemType
ConstrainedAffineControlDiscreteSystem

Continuous-time affine control system with domain constraints of the form:

\[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.BlackBoxDiscreteSystemType
BlackBoxDiscreteSystem <: AbstractDiscreteSystem

Discrete-time system defined by a right-hand side of the form:

\[ x_{k+1} = f(x_k) \; \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
source
MathematicalSystems.ConstrainedBlackBoxDiscreteSystemType
ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

Discrete-time system defined by a right-hand side with domain constraints of the form:

\[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • X – state constraints
source
MathematicalSystems.BlackBoxControlDiscreteSystemType
BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

Discrete-time control system defined by a right-hand side of the form:

\[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
source
MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystemType
ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

Discrete-time control system defined by a right-hand side with domain constraints of the form:

\[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.NoisyConstrainedLinearDiscreteSystemType
NoisyConstrainedLinearDiscreteSystem

Discrete-time linear system with additive disturbance and domain constraints of the form:

\[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

Fields

  • A – state matrix
  • D – noise matrix
  • X – state constraints
  • W – disturbance set
source
MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystemType
NoisyConstrainedLinearControlDiscreteSystem

Continuous-time linear control system with additive disturbance and domain constraints of the form:

\[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • D – noise matrix
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.NoisyAffineControlDiscreteSystemType
NoisyAffineControlDiscreteSystem

Continuous-time affine control system with additive disturbance of the form:

\[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • D – noise matrix
source
MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystemType
NoisyConstrainedAffineControlDiscreteSystem

Continuous-time affine control system with additive disturbance and domain constraints of the form:

\[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

Fields

  • A – state matrix
  • B – input matrix
  • c – affine term
  • D – noise matrix
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.NoisyBlackBoxControlDiscreteSystemType
NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

Discrete-time disturbance-affected control system defined by a right-hand side of the form:

\[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • noisedim – number of noise variables
source
MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystemType
NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

\[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

Fields

  • f – function that holds the right-hand side
  • statedim – number of state variables
  • inputdim – number of input variables
  • noisedim – number of noise variables
  • X – state constraints
  • U – input constraints
  • W – disturbance set
source
MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystemType
SecondOrderConstrainedAffineControlDiscreteSystem

Discrete-time second order constrained affine control system of the form:

\[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k + d, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • K – stiffness matrix
  • B – input matrix
  • d – affine term
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystemType
SecondOrderConstrainedLinearControlDiscreteSystem

Discrete-time second order constrained linear control system of the form:

\[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • K – stiffness matrix
  • B – input matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.SecondOrderDiscreteSystemType
SecondOrderDiscreteSystem

Discrete-time second-order system of the form:

\[ Mx_{k+2} + Cx_{k} + f_i(x_k) = f_e(t_k) \forall k.\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • fi – internal forces
  • fe – external forces

Notes

Typically fi(x_k) is a state-dependent function, and fe is a given vector. In this implementation, their respective types, FI and FE, are generic.

source
MathematicalSystems.SecondOrderConstrainedDiscreteSystemType
SecondOrderConstrainedDiscreteSystem

Discrete-time constrained second-order system of the form:

\[ Mx_{k+2} + Cx_{k} + f_i(x_k) = f_e(t_k) \forall k, x_k ∈ X, f_e(t_k) ∈ U\]

Fields

  • M – mass matrix
  • C – viscosity matrix
  • fi – internal forces
  • fe – external forces
  • X – state set
  • U – input set
source

Discretization Algorithms

MathematicalSystems.AbstractDiscretizationAlgorithmType
AbstractDiscretizationAlgorithm

Abstract supertype for all discretization algorithms.

Note

For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

_discretize(::NewDiscretizationAlgorithm, ΔT::Real,
+             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

are required.

source
MathematicalSystems.ExactDiscretizationType
ExactDiscretization <: AbstractDiscretizationAlgorithm

Exact discretization algorithm for affine systems.

Algorithm

This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

The algorithm described above is a well known result from the literature [1].

[1] Wikipedia

source
MathematicalSystems.EulerDiscretizationType
EulerDiscretization <: AbstractDiscretizationAlgorithm

Euler discretization algorithm for affine systems.

Algorithm

This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

The algorithm described above is a well-known result from the literature [1].

[1] Wikipedia

source

Initial Value Problems

MathematicalSystems.InitialValueProblemType
InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

Fields

  • s – system
  • x0 – initial state

Examples

The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
+
+julia> x₀ = [-1/2, 1/2];
+
+julia> p = InitialValueProblem(s, x₀);
+
+julia> initial_state(p) # same as p.x0
+2-element Vector{Float64}:
+ -0.5
+  0.5
+
+julia> statedim(p)
+2
+
+julia> inputdim(p)
+0
source
MathematicalSystems.initial_stateFunction
initial_state(ivp::InitialValueProblem)

Return the initial state of an initial-value problem.

Input

  • ivp – initial-value problem

Output

The initial state of an initial-value problem.

source
MathematicalSystems.systemFunction
system(ivp::InitialValueProblem)

Return the system wrapped by an initial-value problem.

Input

  • ivp – initial-value problem

Output

The system of the given initial-value problem.

source

Identity Operator

MathematicalSystems.IdentityMultipleType
IdentityMultiple{T} < AbstractMatrix{T} where T

A scalar multiple of the identity matrix of given order and numeric type.

Fields

  • M – uniform scaling operator of type T
  • n – size of the identity matrix

Notes

This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatrix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

Examples

Only specifying the matrix size represents an identity matrix:

julia> using MathematicalSystems: IdentityMultiple
+
+julia> I2 = Id(2)
+IdentityMultiple{Float64} of value 1.0 and order 2
+
+julia> I2 + I2
+IdentityMultiple{Float64} of value 2.0 and order 2
+
+julia> 4*I2
+IdentityMultiple{Float64} of value 4.0 and order 2

The scaling (default 1.0) can be passed as the second argument:

julia> I2r = Id(2, 1//1)
+IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
+
+julia> I2r + I2r
+IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
+
+julia> 4*I2r
+IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

Alternatively, use the constructor passing the UniformScaling (I):

julia> using LinearAlgebra
+
+julia> I2 = IdentityMultiple(2.0*I, 2)
+IdentityMultiple{Float64} of value 2.0 and order 2
+
+julia> I2r = IdentityMultiple(2//1*I, 2)
+IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
source
MathematicalSystems.IdFunction
Id(n::Int, [λ]::Number=1.0)

Convenience constructor of an IdentityMultiple.

Input

  • n – dimension
  • λ – (optional; default: 1.0) scaling factor

Output

An IdentityMultiple of the given size and scaling factor.

source

Input Types

MathematicalSystems.AbstractInputType
AbstractInput

Abstract supertype for all input types.

Notes

The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

source
MathematicalSystems.ConstantInputType
ConstantInput{UT} <: AbstractInput

Type representing an input that remains constant in time.

Fields

  • U – input set

Examples

The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

julia> c = ConstantInput(-1//2)
+ConstantInput{Rational{Int64}}(-1//2)
+
+julia> iterate(c, 1)
+(-1//2, nothing)
+
+julia> iterate(c, 2)
+(-1//2, nothing)
+
+julia> collect(nextinput(c, 4))
+4-element Vector{Rational{Int64}}:
+ -1//2
+ -1//2
+ -1//2
+ -1//2

The elements of this input are rational numbers:

julia> eltype(c)
+Rational{Int64}

To transform a constant input, you can use map as in:

julia> map(x->2*x, c)
+ConstantInput{Rational{Int64}}(-1//1)
source
MathematicalSystems.VaryingInputType
VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

Type representing an input that may vary with time.

Fields

  • U – vector of input sets

Examples

The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

julia> v = VaryingInput([-1//2, 1//2])
+VaryingInput{Rational{Int64}, Vector{Rational{Int64}}}(Rational{Int64}[-1//2, 1//2])
+
+julia> length(v)
+2
+
+julia> eltype(v)
+Rational{Int64}

Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

julia> iterate(v, 1)
+(-1//2, 2)
+
+julia> iterate(v, 2)
+(1//2, 3)

The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

julia> typeof(nextinput(v))
+Base.Iterators.Take{VaryingInput{Rational{Int64}, Vector{Rational{Int64}}}}
+
+julia> collect(nextinput(v, 1))
+1-element Vector{Rational{Int64}}:
+ -1//2
+
+julia> collect(nextinput(v, 2))
+2-element Vector{Rational{Int64}}:
+ -1//2
+  1//2

You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

julia> collect(v)
+2-element Vector{Rational{Int64}}:
+ -1//2
+  1//2
+
+julia> [3*vi for vi in v]
+2-element Vector{Rational{Int64}}:
+ -3//2
+  3//2

Since this input type is finite, querying more elements than its length returns the full vector:

julia> collect(nextinput(v, 4))
+2-element Vector{Rational{Int64}}:
+ -1//2
+  1//2

To transform a varying input, you can use map as in:

julia> map(x->3*x, v)
+VaryingInput{Rational{Int64}, Vector{Rational{Int64}}}(Rational{Int64}[-3//2, 3//2])
source

Maps

MathematicalSystems.ConstrainedLinearControlMapType
ConstrainedLinearControlMap

A linear control map with state and input constraints

\[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

Fields

  • A – matrix
  • B – matrix
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ConstrainedAffineControlMapType
ConstrainedAffineControlMap

An affine control map with state and input constraints

\[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

Fields

  • A – matrix
  • B – matrix
  • c – vector
  • X – state constraints
  • U – input constraints
source
MathematicalSystems.ResetMapType
ResetMap

A reset map

\[ x ↦ R(x),\]

such that a subset of the variables is given a specified value, and the rest are unchanged.

Fields

  • dim – dimension
  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
source
MathematicalSystems.ConstrainedResetMapType
ConstrainedResetMap

A reset map with state constraints of the form

\[ x ↦ R(x), x ∈ \mathcal{X},\]

such that the specified variables are assigned a given value, and the remaining variables are unchanged.

Fields

  • dim – dimension
  • X – state constraints
  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
source
MathematicalSystems.ConstrainedBlackBoxMapType
ConstrainedBlackBoxMap

A constrained black-box map of the form

\[ x ↦ h(x), x ∈ \mathcal{X}.\]

Fields

  • dim – state dimension
  • output_dim – output dimension
  • h – output function
  • X – state constraints
source
MathematicalSystems.BlackBoxControlMapType
BlackBoxControlMap

A black-box control map of the form

\[ (x, u) ↦ h(x, u).\]

Fields

  • dim – state dimension
  • input_dim – input dimension
  • output_dim – output dimension
  • h – output function
source
MathematicalSystems.ConstrainedBlackBoxControlMapType
ConstrainedBlackBoxControlMap

A constrained black-box control map of the form

\[ (x, u) ↦ h(x, u), x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

Fields

  • dim – state dimension
  • input_dim – input dimension
  • output_dim – output dimension
  • h – output function
  • X – state constraints
  • U – input constraints
source

Systems with Output

MathematicalSystems.SystemWithOutputType
SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem

Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

Fields

  • s – system of type ST
  • outputmap – output map of type MT
source
MathematicalSystems.LinearTimeInvariantSystemFunction
LinearTimeInvariantSystem(A, B, C, D)

A linear time-invariant system with of the form

\[x' = Ax + Bu,\\ +y = Cx + Du.\]

Input

  • A – matrix
  • B – matrix
  • C – matrix
  • D – matrix

Output

A system with output such that the system is a linear control continuous system and the output map is a linear control map.

source
LinearTimeInvariantSystem(A, B, C, D, X, U)

A linear time-invariant system with state and input constraints of the form

\[x' = Ax + Bu,\\ +y = Cx + Du,\]

where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

Input

  • A – matrix
  • B – matrix
  • C – matrix
  • D – matrix
  • X – state constraints
  • U – input constraints

Output

A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

source

Vector Fields

MathematicalSystems.VectorFieldType
VectorField{T<:Function}

Type that computes the vector field of an AbstractContinuousSystem.

Fields

  • field – function for calculating the vector field
source

Macros

MathematicalSystems.@systemMacro
system(expr...)

Return an instance of the system type corresponding to the given expressions.

Input

  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

Output

A system that best matches the given expressions.

Notes

Terms. The expression expr contains one or more of the following sub-expressions:

  • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
  • set constraints, e.g. x ∈ X
  • input constraints, e.g. u ∈ U
  • dimensionality, e.g. dim: (2,1) or dim = 1
  • specification of the input variable, e.g. input: u or input = u
  • specification of the noise variable, e,g, noise: w or noise = w

The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

Exceptions. The following exceptions and particular cases apply:

  • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

  • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic equation and hence gives rise to a descriptor system. In this case, the asterisk * operator is mandatory.

  • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

Examples

Let us first create a continuous linear system using this macro:

julia> A = [1. 0; 0 1.];
+
+julia> @system(x' = A*x)
+LinearContinuousSystem{Float64, Matrix{Float64}}([1.0 0.0; 0.0 1.0])

A discrete system is defined by using :

julia> @system(x⁺ = A*x)
+LinearDiscreteSystem{Float64, Matrix{Float64}}([1.0 0.0; 0.0 1.0])

Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

julia> using LazySets
+
+julia> B = Matrix([1.0 0.5]');
+
+julia> c = [1.0, 1.5];
+
+julia> X = BallInf(zeros(2), 10.0);
+
+julia> U = BallInf(zeros(1), 2.0);
+
+julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
+ConstrainedAffineControlContinuousSystem{Float64, Matrix{Float64}, Matrix{Float64}, Vector{Float64}, BallInf{Float64, Vector{Float64}}, BallInf{Float64, Vector{Float64}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5;;], [1.0, 1.5], BallInf{Float64, Vector{Float64}}([0.0, 0.0], 10.0), BallInf{Float64, Vector{Float64}}([0.0], 2.0))

For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

julia> f(x, u) = x + u;
+
+julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
+ConstrainedBlackBoxControlDiscreteSystem{typeof(f), BallInf{Float64, Vector{Float64}}, BallInf{Float64, Vector{Float64}}}(f, 2, 2, BallInf{Float64, Vector{Float64}}([0.0, 0.0], 10.0), BallInf{Float64, Vector{Float64}}([0.0], 2.0))
source
MathematicalSystems.@ivpMacro
ivp(expr...)

Return an instance of the initial-value problem type corresponding to the given expressions.

Input

  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

Output

An initial-value problem that best matches the given expressions.

Notes

This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

Examples

julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
+
+julia> typeof(p)
+InitialValueProblem{LinearContinuousSystem{Float64, IdentityMultiple{Float64}}, Vector{Float64}}
+
+julia> initial_state(p)
+1-element Vector{Float64}:
+ 1.0
+
+julia> sys = @system(x' = [1 0; 0 1] * x);
+
+julia> @ivp(sys, x(0) ∈ [-1, 1])
+InitialValueProblem{LinearContinuousSystem{Int64, Matrix{Int64}}, Vector{Int64}}(LinearContinuousSystem{Int64, Matrix{Int64}}([1 0; 0 1]), [-1, 1])
source
MathematicalSystems.@mapMacro
map(ex, args)

Return an instance of the map type corresponding to the given expression.

Input

  • ex – an expression defining the map, in the form of an anonymous function
  • args – additional optional arguments

Output

A map that best matches the given expression.

Examples

Let us first create a linear map using this macro:

julia> @map x -> [1 0; 0 0]*x
+LinearMap{Int64, Matrix{Int64}}([1 0; 0 0])

We can create an affine system as well:

julia> @map x -> [1 0; 0 0]*x + [2, 0]
+AffineMap{Int64, Matrix{Int64}, Vector{Int64}}([1 0; 0 0], [2, 0])

Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

julia> @map(x -> x, dim=5)
+IdentityMap(5)

A state constraint on such map can be specified passing the additional argument x ∈ X.

An identity map can alternatively be created by giving a the size of the identity matrix as Id(n), for example:

julia> @map x -> Id(5)*x
+IdentityMap(5)
source
diff --git a/previews/PR306/man/systems/index.html b/previews/PR306/man/systems/index.html new file mode 100644 index 00000000..f7af4dac --- /dev/null +++ b/previews/PR306/man/systems/index.html @@ -0,0 +1,11 @@ + +Overview of System Types · MathematicalSystems.jl

Overview of System Types

Using the @system Macro

A convenient way to create a new system is with the @system macro. For example, the ODE $x'(t) = -2x(t)$ is simply x' = -2x, where $x'(t) := dx/dt$ is the derivative of state $x(t)$ with respect to "time":

using MathematicalSystems
+
+@system(x' = -2x)
LinearContinuousSystem{Float64, IdentityMultiple{Float64}}([-2.0;;])

We can also add state constraints, say $x(t) ≥ 0.5$,

using LazySets
+
+H = HalfSpace([-1.0], -0.5) # x >= 0.5
+@system(x' = -2x, x ∈ H)
ConstrainedLinearContinuousSystem{Float64, IdentityMultiple{Float64}, LazySets.HalfSpace{Float64, Vector{Float64}}}([-2.0;;], LazySets.HalfSpace{Float64, Vector{Float64}}([-1.0], -0.5))

Systems of ODEs can be defined using vector notation:

A = [1.0 0.0; -1.0 -2.0]
+B = Ball2(zeros(2), 1.0)
+c = [0.0, 5.0]
+@system(z' = A*z + c, z ∈ B)
ConstrainedAffineContinuousSystem{Float64, Matrix{Float64}, Vector{Float64}, LazySets.Ball2Module.Ball2{Float64, Vector{Float64}}}([1.0 0.0; -1.0 -2.0], [0.0, 5.0], LazySets.Ball2Module.Ball2{Float64, Vector{Float64}}([0.0, 0.0], 1.0))

which defines the two-dimensional system $x' = y$, $y' = -x - 2y + 3$, with state constraints $z ∈ B = \{ \sqrt{x^2 + y^2} \leq 5\}$.

Initial-value problems can be specified with the @ivp macro. For instance, we can attach an initial condition $z(0) = (0.2, 0.2])$ to the previous example:

S0 = Singleton([0.2, 0.2])
+@ivp(z' = A*z + c, z ∈ B, z(0) ∈ S0)
InitialValueProblem{ConstrainedAffineContinuousSystem{Float64, Matrix{Float64}, Vector{Float64}, LazySets.Ball2Module.Ball2{Float64, Vector{Float64}}}, LazySets.SingletonModule.Singleton{Float64, Vector{Float64}}}(ConstrainedAffineContinuousSystem{Float64, Matrix{Float64}, Vector{Float64}, LazySets.Ball2Module.Ball2{Float64, Vector{Float64}}}([1.0 0.0; -1.0 -2.0], [0.0, 5.0], LazySets.Ball2Module.Ball2{Float64, Vector{Float64}}([0.0, 0.0], 1.0)), LazySets.SingletonModule.Singleton{Float64, Vector{Float64}}([0.2, 0.2]))

Inputs

In the examples introduced so far, the macro has automatically created different system types given a defining equation, either in scalar or in vector form, and state constraints. It is possible to define systems with additive input terms or noise terms, with constraints on the state, inputs or combinations of these. Other specific classes of systems such as descriptor, polynomial or general nonlinear systems given by a standard Julia function are available as well (see the tables below).

Some applications require distinguishing between controlled inputs and uncontrolled or noise inputs. In this library we make such distinction by noting field names with $u$ and $w$ for (controlled) inputs and noise respectively. Please note that some systems are structurally equivalent, for example CLCCS and NCLCS being $x' = Ax + Bu$ and $x' = Ax + Dw$ respectively; the difference lies in the resulting value of getter functions such as inputset and noiseset.

Summary Tables

The following table summarizes the different system types in abbreviated form. The abbreviated names are included here only for reference and are not exported. See the Types section of this manual, or simply click on the system's name for details on each type.

Please note that for each continuous system there is a corresponding discrete system, e.g. there is ConstrainedAffineContinuousSystem and ConstrainedAffineDiscreteSystem, etc. However in this table we only included continuous system types for brevity.

AbbreviationSystem type
CISContinuousIdentitySystem
CCISConstrainedContinuousIdentitySystem
LCSLinearContinuousSystem
ACSAffineContinuousSystem
LCCSLinearControlContinuousSystem
ACCSAffineControlContinuousSystem
CLCSConstrainedLinearContinuousSystem
CACSConstrainedAffineContinuousSystem
CACCSConstrainedAffineControlContinuousSystem
CLCCSConstrainedLinearControlContinuousSystem
LACSLinearDescriptorContinuousSystem
CLACSConstrainedLinearDescriptorContinuousSystem
PCSPolynomialContinuousSystem
CPCSPolynomialContinuousSystem
BBCSBlackBoxContinuousSystem
CBBCSConstrainedBlackBoxContinuousSystem
BBCCSBlackBoxControlContinuousSystem
CBBCCSConstrainedBlackBoxControlContinuousSystem
NLCSNoisyLinearContinuousSystem
NCLCSNoisyConstrainedLinearContinuousSystem
NLCCSNoisyLinearControlContinuousSystem
NCLCCSNoisyConstrainedLinearControlContinuousSystem
NACCSNoisyAffineControlContinuousSystem
NCALCCSNoisyConstrainedAffineControlContinuousSystem
NBBCCSNoisyBlackBoxControlContinuousSystem
NCBBCCSNoisyConstrainedBlackBoxControlContinuousSystem
SOLCSSecondOrderLinearContinuousSystem
SOACSSecondOrderAffineContinuousSystem
SOCACCSSecondOrderConstrainedAffineControlContinuousSystem
SOCLCCSSecondOrderConstrainedLinearControlContinuousSystem

The following table summarizes the equation represented by each system type (the names are given in abbreviated form). Again, discrete systems are not included. The column Input constraints is yes if the structure can model input or noise constraints (or both).

EquationState constraintsInput constraintsSystem type (abbr.)
$x' = 0$nonoCIS
$x' = 0, x ∈ X$yesnoCCIS
$x' = Ax$nonoLCS
$x' = Ax + c$nonoACS
$x' = Ax + Bu$nonoLCCS
$x' = Ax + Bu + c$nonoACCS
$x' = Ax, x ∈ X$yesnoCLCS
$x' = Ax + c, x ∈ X$yesnoCACS
$x' = Ax + Bu + c, x ∈ X, u ∈ U$yesyesCACCS
$x' = Ax + Bu, x ∈ X, u ∈ U$yesyesCLCCS
$Ex' = Ax$nonoLACS
$Ex' = Ax, x ∈ X$yesnoCLACS
$x' = p(x)$nonoPCS
$x' = p(x), x ∈ X$yesnoCPCS
$x' = f(x)$nonoBBCS
$x' = f(x), x ∈ X$yesnoCBBCS
$x' = f(x, u)$nonoBBCCS
$x' = f(x, u), x ∈ X, u ∈ U$yesyesCBBCCS
$x' = Ax + Dw$nonoNLCS
$x' = Ax + Dw, x ∈ X, w ∈ W$yesyesNCLCS
$x' = Ax + Bu + Dw$nonoNLCCS
$x' = Ax + Bu + Dw, x ∈ X, u ∈ U, w ∈ W$yesyesNCLCCS
$x' = Ax + Bu + c + Dw$nonoNACCS
$x' = Ax + Bu + c + Dw, x ∈ X, u ∈ U, w ∈ W$yesyesNCALCCS
$x' = f(x, u, w)$nonoNBBCCS
$x' = f(x, u, w), x ∈ X, u ∈ U, w ∈ W$yesyesNCBBCCS
$Mx'' + Cx' + Kx = 0$nonoSOLCS
$Mx'' + Cx' + Kx = b$nonoSOACS
$Mx'' + Cx' + Kx = Bu + d, x ∈ X, u ∈ U$yesyesSOCACCS
$Mx'' + Cx' + Kx = Bu, x ∈ X, u ∈ U$yesyesSOCLCCS
$Mx'' + Cx' + f_i(x) = f_e$nonoSOCS
$Mx'' + Cx' + f_i(x) = f_e$, x ∈ X, u ∈ U``yesyesSOCCS
diff --git a/previews/PR306/objects.inv b/previews/PR306/objects.inv new file mode 100644 index 00000000..96f0dd4a Binary files /dev/null and b/previews/PR306/objects.inv differ diff --git a/previews/PR306/search_index.js b/previews/PR306/search_index.js new file mode 100644 index 00000000..463655a9 --- /dev/null +++ b/previews/PR306/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-Handling","page":"Internals","title":"Expression Handling","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\n_sort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continuous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._sort","page":"Internals","title":"MathematicalSystems._sort","text":"_sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> using MathematicalSystems: _sort\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> _sort(parameters, (:X, :U, :W))\n3-element Vector{Tuple{Any, Symbol}}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> _sort(parameters, (:A, :B, :c, :D))\n2-element Vector{Tuple{Any, Symbol}}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-Expressions","page":"Internals","title":"Querying Expressions","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Vector{Tuple{Any, Symbol}}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Vector{Tuple{Any, Symbol}}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Vector{Tuple{Any, Symbol}}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Evaluation-of-AbstractSystem-at-Given-State","page":"Internals","title":"Evaluation of AbstractSystem at Given State","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"_instantiate","category":"page"},{"location":"lib/internals/#MathematicalSystems._instantiate","page":"Internals","title":"MathematicalSystems._instantiate","text":"_instantiate(system::AbstractSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying one input.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-Convention-for-Systems'-Fields","page":"Internals","title":"Naming Convention for Systems' Fields","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About","page":"About","title":"About","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This project is synchronized with GitHub Actions such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to make all unit tests pass.","category":"page"},{"location":"about/","page":"About","title":"About","text":"To run the unit tests locally, you can do:","category":"page"},{"location":"about/","page":"About","title":"About","text":"julia> using Pkg\n\njulia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"man/systems/#Overview-of-System-Types","page":"Overview of System Types","title":"Overview of System Types","text":"","category":"section"},{"location":"man/systems/#Using-the-@system-Macro","page":"Overview of System Types","title":"Using the @system Macro","text":"","category":"section"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"A convenient way to create a new system is with the @system macro. For example, the ODE x(t) = -2x(t) is simply x' = -2x, where x(t) = dxdt is the derivative of state x(t) with respect to \"time\":","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"using MathematicalSystems\n\n@system(x' = -2x)","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"We can also add state constraints, say x(t) 05,","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"using LazySets\n\nH = HalfSpace([-1.0], -0.5) # x >= 0.5\n@system(x' = -2x, x ∈ H)","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Systems of ODEs can be defined using vector notation:","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"A = [1.0 0.0; -1.0 -2.0]\nB = Ball2(zeros(2), 1.0)\nc = [0.0, 5.0]\n@system(z' = A*z + c, z ∈ B)","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"which defines the two-dimensional system x = y, y = -x - 2y + 3, with state constraints z B = sqrtx^2 + y^2 leq 5.","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Initial-value problems can be specified with the @ivp macro. For instance, we can attach an initial condition z(0) = (02 02) to the previous example:","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"S0 = Singleton([0.2, 0.2])\n@ivp(z' = A*z + c, z ∈ B, z(0) ∈ S0)","category":"page"},{"location":"man/systems/#Inputs","page":"Overview of System Types","title":"Inputs","text":"","category":"section"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"In the examples introduced so far, the macro has automatically created different system types given a defining equation, either in scalar or in vector form, and state constraints. It is possible to define systems with additive input terms or noise terms, with constraints on the state, inputs or combinations of these. Other specific classes of systems such as descriptor, polynomial or general nonlinear systems given by a standard Julia function are available as well (see the tables below).","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Some applications require distinguishing between controlled inputs and uncontrolled or noise inputs. In this library we make such distinction by noting field names with u and w for (controlled) inputs and noise respectively. Please note that some systems are structurally equivalent, for example CLCCS and NCLCS being x = Ax + Bu and x = Ax + Dw respectively; the difference lies in the resulting value of getter functions such as inputset and noiseset.","category":"page"},{"location":"man/systems/#Summary-Tables","page":"Overview of System Types","title":"Summary Tables","text":"","category":"section"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"The following table summarizes the different system types in abbreviated form. The abbreviated names are included here only for reference and are not exported. See the Types section of this manual, or simply click on the system's name for details on each type.","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Please note that for each continuous system there is a corresponding discrete system, e.g. there is ConstrainedAffineContinuousSystem and ConstrainedAffineDiscreteSystem, etc. However in this table we only included continuous system types for brevity.","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Abbreviation System type\nCIS ContinuousIdentitySystem\nCCIS ConstrainedContinuousIdentitySystem\nLCS LinearContinuousSystem\nACS AffineContinuousSystem\nLCCS LinearControlContinuousSystem\nACCS AffineControlContinuousSystem\nCLCS ConstrainedLinearContinuousSystem\nCACS ConstrainedAffineContinuousSystem\nCACCS ConstrainedAffineControlContinuousSystem\nCLCCS ConstrainedLinearControlContinuousSystem\nLACS LinearDescriptorContinuousSystem\nCLACS ConstrainedLinearDescriptorContinuousSystem\nPCS PolynomialContinuousSystem\nCPCS PolynomialContinuousSystem\nBBCS BlackBoxContinuousSystem\nCBBCS ConstrainedBlackBoxContinuousSystem\nBBCCS BlackBoxControlContinuousSystem\nCBBCCS ConstrainedBlackBoxControlContinuousSystem\nNLCS NoisyLinearContinuousSystem\nNCLCS NoisyConstrainedLinearContinuousSystem\nNLCCS NoisyLinearControlContinuousSystem\nNCLCCS NoisyConstrainedLinearControlContinuousSystem\nNACCS NoisyAffineControlContinuousSystem\nNCALCCS NoisyConstrainedAffineControlContinuousSystem\nNBBCCS NoisyBlackBoxControlContinuousSystem\nNCBBCCS NoisyConstrainedBlackBoxControlContinuousSystem\nSOLCS SecondOrderLinearContinuousSystem\nSOACS SecondOrderAffineContinuousSystem\nSOCACCS SecondOrderConstrainedAffineControlContinuousSystem\nSOCLCCS SecondOrderConstrainedLinearControlContinuousSystem","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"The following table summarizes the equation represented by each system type (the names are given in abbreviated form). Again, discrete systems are not included. The column Input constraints is yes if the structure can model input or noise constraints (or both).","category":"page"},{"location":"man/systems/","page":"Overview of System Types","title":"Overview of System Types","text":"Equation State constraints Input constraints System type (abbr.)\nx = 0 no no CIS\nx = 0 x X yes no CCIS\nx = Ax no no LCS\nx = Ax + c no no ACS\nx = Ax + Bu no no LCCS\nx = Ax + Bu + c no no ACCS\nx = Ax x X yes no CLCS\nx = Ax + c x X yes no CACS\nx = Ax + Bu + c x X u U yes yes CACCS\nx = Ax + Bu x X u U yes yes CLCCS\nEx = Ax no no LACS\nEx = Ax x X yes no CLACS\nx = p(x) no no PCS\nx = p(x) x X yes no CPCS\nx = f(x) no no BBCS\nx = f(x) x X yes no CBBCS\nx = f(x u) no no BBCCS\nx = f(x u) x X u U yes yes CBBCCS\nx = Ax + Dw no no NLCS\nx = Ax + Dw x X w W yes yes NCLCS\nx = Ax + Bu + Dw no no NLCCS\nx = Ax + Bu + Dw x X u U w W yes yes NCLCCS\nx = Ax + Bu + c + Dw no no NACCS\nx = Ax + Bu + c + Dw x X u U w W yes yes NCALCCS\nx = f(x u w) no no NBBCCS\nx = f(x u w) x X u U w W yes yes NCBBCCS\nMx + Cx + Kx = 0 no no SOLCS\nMx + Cx + Kx = b no no SOACS\nMx + Cx + Kx = Bu + d x X u U yes yes SOCACCS\nMx + Cx + Kx = Bu x X u U yes yes SOCLCCS\nMx + Cx + f_i(x) = f_e no no SOCS\nMx + Cx + f_i(x) = f_e, x ∈ X, u ∈ U`` yes yes SOCCS","category":"page"},{"location":"lib/types/#Types","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nAffineControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearDescriptorContinuousSystem\nConstrainedLinearDescriptorContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem\nSecondOrderLinearContinuousSystem\nSecondOrderAffineContinuousSystem\nSecondOrderConstrainedAffineControlContinuousSystem\nSecondOrderConstrainedLinearControlContinuousSystem\nSecondOrderContinuousSystem\nSecondOrderConstrainedContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.AffineControlContinuousSystem","text":"AffineControlContinuousSystem\n\nContinuous-time affine control system of the form:\n\n x(t) = A x(t) + B u(t) + c forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDescriptorContinuousSystem","page":"Types","title":"MathematicalSystems.LinearDescriptorContinuousSystem","text":"LinearDescriptorContinuousSystem\n\nContinuous-time linear descriptor system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDescriptorContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDescriptorContinuousSystem","text":"ConstrainedLinearDescriptorContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearContinuousSystem","text":"SecondOrderLinearContinuousSystem\n\nContinuous-time second order linear system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = 0 forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineContinuousSystem","text":"SecondOrderAffineContinuousSystem\n\nContinuous-time second order affine system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = b forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","text":"SecondOrderConstrainedAffineControlContinuousSystem\n\nContinuous-time second order constrained affine control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t) + d  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","text":"SecondOrderConstrainedLinearControlContinuousSystem\n\nContinuous-time second order constrained linear control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderContinuousSystem","text":"SecondOrderContinuousSystem\n\nContinuous-time second-order system of the form:\n\n Mx(t) + Cx(t) + f_i(x) = f_e(t) forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nfi – internal forces\nfe – external forces\n\nNotes\n\nTypically fi(x) is a state-dependent function, and fe is a given vector. In this implementation, their respective types, FI and FE, are generic.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedContinuousSystem","text":"SecondOrderConstrainedContinuousSystem\n\nContinuous-time constrained second-order system of the form:\n\n Mx(t) + Cx(t) + f_i(x) = f_e(t) forall t x X f_e(t) U\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nfi – internal forces\nfe – external forces\nX – state set\nU – input set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nAffineControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearDescriptorDiscreteSystem\nConstrainedLinearDescriptorDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem\nSecondOrderLinearDiscreteSystem\nSecondOrderAffineDiscreteSystem\nSecondOrderConstrainedAffineControlDiscreteSystem\nSecondOrderConstrainedLinearControlDiscreteSystem\nSecondOrderDiscreteSystem\nSecondOrderConstrainedDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineControlDiscreteSystem","text":"AffineControlDiscreteSystem\n\nContinuous-time affine control system of the form:\n\n x_k+1 = A x_k + B u_k + c forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDescriptorDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDescriptorDiscreteSystem","text":"LinearDescriptorDiscreteSystem\n\nDiscrete-time linear descriptor system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDescriptorDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDescriptorDiscreteSystem","text":"ConstrainedLinearDescriptorDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearDiscreteSystem","text":"SecondOrderLinearDiscreteSystem\n\nDiscrete-time second order linear system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = 0 forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineDiscreteSystem","text":"SecondOrderAffineDiscreteSystem\n\nDiscrete-time second order affine system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = b forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","text":"SecondOrderConstrainedAffineControlDiscreteSystem\n\nDiscrete-time second order constrained affine control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k + d  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","text":"SecondOrderConstrainedLinearControlDiscreteSystem\n\nDiscrete-time second order constrained linear control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderDiscreteSystem","text":"SecondOrderDiscreteSystem\n\nDiscrete-time second-order system of the form:\n\n Mx_k+2 + Cx_k + f_i(x_k) = f_e(t_k) forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nfi – internal forces\nfe – external forces\n\nNotes\n\nTypically fi(x_k) is a state-dependent function, and fe is a given vector. In this implementation, their respective types, FI and FE, are generic.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedDiscreteSystem","text":"SecondOrderConstrainedDiscreteSystem\n\nDiscrete-time constrained second-order system of the form:\n\n Mx_k+2 + Cx_k + f_i(x_k) = f_e(t_k) forall k x_k X f_e(t_k) U\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nfi – internal forces\nfe – external forces\nX – state set\nU – input set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] Wikipedia\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well-known result from the literature [1].\n\n[1] Wikipedia\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Vector{Float64}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Identity-Operator","page":"Types","title":"Identity Operator","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"IdentityMultiple\nId","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatrix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nOnly specifying the matrix size represents an identity matrix:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = Id(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe scaling (default 1.0) can be passed as the second argument:\n\njulia> I2r = Id(2, 1//1)\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nAlternatively, use the constructor passing the UniformScaling (I):\n\njulia> using LinearAlgebra\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.Id","page":"Types","title":"MathematicalSystems.Id","text":"Id(n::Int, [λ]::Number=1.0)\n\nConvenience constructor of an IdentityMultiple.\n\nInput\n\nn – dimension\nλ – (optional; default: 1.0) scaling factor\n\nOutput\n\nAn IdentityMultiple of the given size and scaling factor.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Vector{Rational{Int64}}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64}, Vector{Rational{Int64}}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64}, Vector{Rational{Int64}}}}\n\njulia> collect(nextinput(v, 1))\n1-element Vector{Rational{Int64}}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Vector{Rational{Int64}}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Vector{Rational{Int64}}:\n -1//2\n 1//2\n\njulia> [3*vi for vi in v]\n2-element Vector{Rational{Int64}}:\n -3//2\n 3//2\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Vector{Rational{Int64}}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->3*x, v)\nVaryingInput{Rational{Int64}, Vector{Rational{Int64}}}(Rational{Int64}[-3//2, 3//2])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap\nBlackBoxMap\nConstrainedBlackBoxMap\nBlackBoxControlMap\nConstrainedBlackBoxControlMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form\n\n x x x mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form\n\n x Ax x mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form\n\n x Ax + c x mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxMap","page":"Types","title":"MathematicalSystems.BlackBoxMap","text":"BlackBoxMap\n\nA black-box map of the form\n\n x h(x)\n\nFields\n\ndim – state dimension\noutput_dim – output dimension\nh – output function\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxMap","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxMap","text":"ConstrainedBlackBoxMap\n\nA constrained black-box map of the form\n\n x h(x) x mathcalX\n\nFields\n\ndim – state dimension\noutput_dim – output dimension\nh – output function\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlMap","page":"Types","title":"MathematicalSystems.BlackBoxControlMap","text":"BlackBoxControlMap\n\nA black-box control map of the form\n\n (x u) h(x u)\n\nFields\n\ndim – state dimension\ninput_dim – input dimension\noutput_dim – output dimension\nh – output function\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlMap","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlMap","text":"ConstrainedBlackBoxControlMap\n\nA constrained black-box control map of the form\n\n (x u) h(x u) x mathcalX u mathcalU\n\nFields\n\ndim – state dimension\ninput_dim – input dimension\noutput_dim – output dimension\nh – output function\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Systems-with-Output","page":"Types","title":"Systems with Output","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Vector-Fields","page":"Types","title":"Vector Fields","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"VectorField","category":"page"},{"location":"lib/types/#MathematicalSystems.VectorField","page":"Types","title":"MathematicalSystems.VectorField","text":"VectorField{T<:Function}\n\nType that computes the vector field of an AbstractContinuousSystem.\n\nFields\n\nfield – function for calculating the vector field\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"@system\n@ivp\n@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic equation and hence gives rise to a descriptor system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64, Matrix{Float64}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64, Matrix{Float64}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1.0 0.5]');\n\njulia> c = [1.0, 1.5];\n\njulia> X = BallInf(zeros(2), 10.0);\n\njulia> U = BallInf(zeros(1), 2.0);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64, Matrix{Float64}, Matrix{Float64}, Vector{Float64}, BallInf{Float64, Vector{Float64}}, BallInf{Float64, Vector{Float64}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5;;], [1.0, 1.5], BallInf{Float64, Vector{Float64}}([0.0, 0.0], 10.0), BallInf{Float64, Vector{Float64}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f), BallInf{Float64, Vector{Float64}}, BallInf{Float64, Vector{Float64}}}(f, 2, 2, BallInf{Float64, Vector{Float64}}([0.0, 0.0], 10.0), BallInf{Float64, Vector{Float64}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64, IdentityMultiple{Float64}}, Vector{Float64}}\n\njulia> initial_state(p)\n1-element Vector{Float64}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64, Matrix{Int64}}, Vector{Int64}}(LinearContinuousSystem{Int64, Matrix{Int64}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64, Matrix{Int64}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64, Matrix{Int64}, Vector{Int64}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nA state constraint on such map can be specified passing the additional argument x ∈ X.\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as Id(n), for example:\n\njulia> @map x -> Id(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"#MathematicalSystems.jl","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features","page":"Home","title":"Features","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, descriptor systems, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Ecosystem","page":"Home","title":"Ecosystem","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The following packages use MathematicalSystems.jl:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Dionysos.jl – Optimal control of cyber-physical systems\nHybridSystems.jl – Hybrid Systems definitions in Julia\nReachabilityAnalysis.jl – Methods to compute sets of states reachable by dynamical systems\nSpaceExParser.jl – SpaceEx modeling language parser\nStructuralDynamicsODESolvers.jl – Numerical integration methods for structural dynamics problems\nSwitchOnSafety.jl – Computing controlled invariant sets of Hybrid Systems using Sum Of Squares Programming","category":"page"},{"location":"#Manual-Outline","page":"Home","title":"Manual Outline","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\n \"man/systems.md\"\n]\nDepth = 2","category":"page"},{"location":"#Library-Outline","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Noises","page":"Methods","title":"Noises","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"noisedim\nnoiseset","category":"page"},{"location":"lib/methods/#MathematicalSystems.noisedim","page":"Methods","title":"MathematicalSystems.noisedim","text":"noisedim(s::AbstractSystem)\n\nReturns the dimension of the noise space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.noiseset","page":"Methods","title":"MathematicalSystems.noiseset","text":"noiseset(s::AbstractSystem)\n\nReturns the set of allowed noises of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::AbstractSystem)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nisaffine(::AbstractMap)\nispolynomial(::AbstractSystem)\nisblackbox(::AbstractSystem)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)\nmapping(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nDetermines whether the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nDetermines whether the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nDetermines whether the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nDetermines whether the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nDetermines whether the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isblackbox-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isblackbox","text":"isblackbox(s::AbstractSystem)\n\nDetermines whether no specific structure is assumed for the dynamics of system s.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(s::AbstractSystem)\n\nReturns the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(s::AbstractSystem)\n\nReturns the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(s::AbstractSystem)\n\nReturns the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(s::AbstractSystem)\n\nReturns the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.mapping-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.mapping","text":"mapping(s::AbstractSystem)\n\nReturns the mapping of a black-box system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Vector-Field","page":"Methods","title":"Vector Field","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"vector_field","category":"page"},{"location":"lib/methods/#MathematicalSystems.vector_field","page":"Methods","title":"MathematicalSystems.vector_field","text":"vector_field(system::ContinuousIdentitySystem, x::AbstractVector)\n\nReturn the vector field state of a ContinuousIdentitySystem.\n\nInput\n\nsystem – ContinuousIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of a ConstrainedContinuousIdentitySystem.\n\nInput\n\nsystem – ConstrainedContinuousIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{<:AbstractSystem}}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOutput\n\nThe complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/previews/PR306/siteinfo.js b/previews/PR306/siteinfo.js new file mode 100644 index 00000000..f7add337 --- /dev/null +++ b/previews/PR306/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR306"; diff --git a/release-0.1/about.html b/release-0.1/about.html new file mode 100644 index 00000000..d4843f0d --- /dev/null +++ b/release-0.1/about.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

About

About

This page contains some general information about this project, and recommendations about contributing.

Contributing

If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

Branches and pull requests (PR)

We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

Unit testing and continuous integration (CI)

This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

$ julia --color=yes test/runtests.jl

Alternatively, you can achieve the same from inside the REPL using the following command:

julia> Pkg.test("MathematicalSystems")

We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

Contributing to the documentation

New functions and types should be documented according to our guidelines directly in the source code.

You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

julia> ?LinearContinuousSystem

This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

$ julia --color=yes docs/make.jl

Note that this also runs all doctests which will take some time.

Related projects

This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

Below we list more related projects.

Package nameDescription
HybridSystems.jlHybrid Systems definitions in Julia.
LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
ControlToolbox.jlAnalysis and design tools for control systems.
ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
ControlSystems.jlA Control Systems Toolbox for Julia
ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

Credits

These persons have contributed to MathematicalSystems.jl (in alphabetic order):

diff --git a/release-0.1/assets/arrow.svg b/release-0.1/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/release-0.1/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/release-0.1/assets/documenter.css b/release-0.1/assets/documenter.css new file mode 100644 index 00000000..dc1b4cf5 --- /dev/null +++ b/release-0.1/assets/documenter.css @@ -0,0 +1,577 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

the is very first thing on the page (i.e. the second element + * in the
, * after the
, we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
 surrounding the , while
+ * highlight.js applies the .hljs style directly to the  tag.
+ */
+.hljs {
+    background-color: transparent;
+    padding: 0;
+}
+
+@media only screen and (max-width: 768px) {
+    nav.toc {
+        position: fixed;
+        overflow-y: scroll;
+        width: 16em;
+        left: -16em;
+        -webkit-overflow-scrolling: touch;
+        -webkit-transition-property: left; /* Safari */
+        -webkit-transition-duration: 0.3s; /* Safari */
+        transition-property: left;
+        transition-duration: 0.3s;
+        -webkit-transition-timing-function: ease-out; /* Safari */
+        transition-timing-function: ease-out;
+        z-index: 2;
+    }
+
+    nav.toc.show {
+        left: 0;
+    }
+
+    article {
+        margin-left: 0;
+        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
+        overflow-wrap: break-word;
+    }
+
+    article > header {
+        position: fixed;
+        left: 0;
+        z-index: 1;
+    }
+
+    article > header nav, hr {
+        display: none;
+    }
+
+    article > header div#topbar {
+        display: block; /* is mobile */
+        position: fixed;
+        width: 100%;
+        height: 1.5em;
+        padding-top: 1em;
+        padding-bottom: 1em;
+        background-color: #fcfcfc;
+        box-shadow: 0 1px 3px rgba(0,0,0,.26);
+        top: 0;
+        -webkit-transition-property: top; /* Safari */
+        -webkit-transition-duration: 0.3s; /* Safari */
+        transition-property: top;
+        transition-duration: 0.3s;
+    }
+
+    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
+        top: -4em;
+        -webkit-transition-property: top; /* Safari */
+        -webkit-transition-duration: 0.7s; /* Safari */
+        transition-property: top;
+        transition-duration: 0.7s;
+    }
+
+    article > header div#topbar span {
+        position: fixed;
+        width: 80%;
+        height: 1.5em;
+        margin-top: -0.1em;
+        margin-left: 0.9em;
+        font-size: 1.2em;
+        overflow: hidden;
+    }
+
+    article > header div#topbar a.fa-bars {
+        float: right;
+        padding: 0.6em;
+        margin-top: -0.6em;
+        margin-right: 0.3em;
+        font-size: 1.5em;
+    }
+
+    article > header div#topbar a.fa-bars:visited {
+        color: #3091d1;
+    }
+
+    article table {
+        overflow-x: auto;
+        display: block;
+    }
+
+    article div.MathJax_Display {
+        overflow: scroll;
+    }
+
+    article span.MathJax {
+        overflow: hidden;
+    }
+}
+
+@media only screen and (max-width: 320px) {
+    body {
+        font-size: 15px;
+    }
+}
diff --git a/release-0.1/assets/documenter.js b/release-0.1/assets/documenter.js
new file mode 100644
index 00000000..5d31622f
--- /dev/null
+++ b/release-0.1/assets/documenter.js
@@ -0,0 +1,129 @@
+/*
+ * Part of Documenter.jl
+ *     https://github.com/JuliaDocs/Documenter.jl
+ *
+ * License: MIT
+ */
+
+requirejs.config({
+    paths: {
+        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
+        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
+        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
+        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
+        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
+        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
+        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
+    },
+    shim: {
+        'mathjax' : {
+            exports: "MathJax"
+        },
+        'highlight-julia': ['highlight'],
+        'highlight-julia-repl': ['highlight'],
+    }
+});
+
+// Load MathJax
+require(['mathjax'], function(MathJax) {
+    MathJax.Hub.Config({
+      "tex2jax": {
+        inlineMath: [['$','$'], ['\\(','\\)']],
+        processEscapes: true
+      }
+    });
+    MathJax.Hub.Config({
+      config: ["MMLorHTML.js"],
+      jax: [
+        "input/TeX",
+        "output/HTML-CSS",
+        "output/NativeMML"
+      ],
+      extensions: [
+        "MathMenu.js",
+        "MathZoom.js",
+        "TeX/AMSmath.js",
+        "TeX/AMSsymbols.js",
+        "TeX/autobold.js",
+        "TeX/autoload-all.js"
+      ]
+    });
+    MathJax.Hub.Config({
+      TeX: { equationNumbers: { autoNumber: "AMS" } }
+    });
+})
+
+require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
+    $(document).ready(function() {
+        hljs.initHighlighting();
+    })
+
+})
+
+// update the version selector with info from the siteinfo.js and ../versions.js files
+require(['jquery'], function($) {
+    $(document).ready(function() {
+        var version_selector = $("#version-selector");
+
+        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
+        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
+            var option = $("");
+            version_selector.append(option);
+        }
+
+        if (typeof DOC_VERSIONS !== 'undefined') {
+            var existing_versions = $('#version-selector > option');
+            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
+            DOC_VERSIONS.forEach(function(each) {
+                var version_url = documenterBaseURL + "/../" + each;
+                var existing_id = $.inArray(each, existing_versions_texts);
+                // if not already in the version selector, add it as a new option,
+                // otherwise update the old option with the URL and enable it
+                if (existing_id == -1) {
+                    var option = $("");
+                    version_selector.append(option);
+                } else {
+                    var option = existing_versions[existing_id];
+                    option.value = version_url;
+                    option.disabled = false;
+                }
+            });
+        }
+
+        // only show the version selector if the selector has been populated
+        if ($('#version-selector > option').length > 0) {
+            version_selector.css("visibility", "visible");
+        }
+    })
+
+})
+
+// mobile
+require(['jquery', 'headroom'], function($, Headroom) {
+    $(document).ready(function() {
+        var navtoc = $("nav.toc");
+        $("nav.toc li.current a.toctext").click(function() {
+            navtoc.toggleClass('show');
+        });
+        $("article > header div#topbar a.fa-bars").click(function(ev) {
+            ev.preventDefault();
+            navtoc.toggleClass('show');
+            if (navtoc.hasClass('show')) {
+                var title = $("article > header div#topbar span").text();
+                $("nav.toc ul li a:contains('" + title + "')").focus();
+            }
+        });
+        $("article#docs").bind('click', function(ev) {
+            if ($(ev.target).is('div#topbar a.fa-bars')) {
+                return;
+            }
+            if (navtoc.hasClass('show')) {
+                navtoc.removeClass('show');
+            }
+        });
+        if ($("article > header div#topbar").css('display') == 'block') {
+            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
+            headroom.init();
+        }
+    })
+})
diff --git a/release-0.1/assets/juliareach.css b/release-0.1/assets/juliareach.css
new file mode 100644
index 00000000..64b0d92d
--- /dev/null
+++ b/release-0.1/assets/juliareach.css
@@ -0,0 +1,583 @@
+/*
+ * The default CSS style for Documenter.jl generated sites
+ *
+ * Heavily inspired by the Julia Sphinx theme
+ *     https://github.com/JuliaLang/JuliaDoc
+ * which extends the sphinx_rtd_theme
+ *     https://github.com/snide/sphinx_rtd_theme
+ *
+ * Part of Documenter.jl
+ *     https://github.com/JuliaDocs/Documenter.jl
+ *
+ * License: MIT
+ */
+
+/* The original CSS is modified such that it right-justifies the text. */
+
+/* fonts */
+body, input {
+  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
+  font-size: 16px;
+  color: #222;
+  text-rendering: optimizeLegibility;
+}
+
+pre, code, kbd {
+  font-family: 'Roboto Mono', Monaco, courier, monospace;
+  font-size: 0.90em;
+}
+
+pre code {
+  font-size: 1em;
+}
+
+a {
+    color: #2980b9;
+    text-decoration: none;
+}
+
+a:hover {
+    color: #3091d1;
+}
+
+a:visited {
+    color: #9b59b6;
+}
+
+body {
+    line-height: 1.5;
+}
+
+h1 {
+    font-size: 1.75em;
+}
+
+/* Unless the 

the is very first thing on the page (i.e. the second element + * in the
, * after the
, we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
 surrounding the , while
+ * highlight.js applies the .hljs style directly to the  tag.
+ */
+.hljs {
+    background-color: transparent;
+    padding: 0;
+}
+
+@media only screen and (max-width: 768px) {
+    nav.toc {
+        position: fixed;
+        overflow-y: scroll;
+        width: 16em;
+        left: -16em;
+        -webkit-overflow-scrolling: touch;
+        -webkit-transition-property: left; /* Safari */
+        -webkit-transition-duration: 0.3s; /* Safari */
+        transition-property: left;
+        transition-duration: 0.3s;
+        -webkit-transition-timing-function: ease-out; /* Safari */
+        transition-timing-function: ease-out;
+        z-index: 2;
+    }
+
+    nav.toc.show {
+        left: 0;
+    }
+
+    article {
+        margin-left: 0;
+        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
+        overflow-wrap: break-word;
+    }
+
+    article > header {
+        position: fixed;
+        left: 0;
+        z-index: 1;
+    }
+
+    article > header nav, hr {
+        display: none;
+    }
+
+    article > header div#topbar {
+        display: block; /* is mobile */
+        position: fixed;
+        width: 100%;
+        height: 1.5em;
+        padding-top: 1em;
+        padding-bottom: 1em;
+        background-color: #fcfcfc;
+        box-shadow: 0 1px 3px rgba(0,0,0,.26);
+        top: 0;
+        -webkit-transition-property: top; /* Safari */
+        -webkit-transition-duration: 0.3s; /* Safari */
+        transition-property: top;
+        transition-duration: 0.3s;
+    }
+
+    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
+        top: -4em;
+        -webkit-transition-property: top; /* Safari */
+        -webkit-transition-duration: 0.7s; /* Safari */
+        transition-property: top;
+        transition-duration: 0.7s;
+    }
+
+    article > header div#topbar span {
+        position: fixed;
+        width: 80%;
+        height: 1.5em;
+        margin-top: -0.1em;
+        margin-left: 0.9em;
+        font-size: 1.2em;
+        overflow: hidden;
+    }
+
+    article > header div#topbar a.fa-bars {
+        float: right;
+        padding: 0.6em;
+        margin-top: -0.6em;
+        margin-right: 0.3em;
+        font-size: 1.5em;
+    }
+
+    article > header div#topbar a.fa-bars:visited {
+        color: #3091d1;
+    }
+
+    article table {
+        overflow-x: auto;
+        display: block;
+    }
+
+    article div.MathJax_Display {
+        overflow: scroll;
+    }
+
+    article span.MathJax {
+        overflow: hidden;
+    }
+}
+
+@media only screen and (max-width: 320px) {
+    body {
+        font-size: 15px;
+    }
+}
diff --git a/release-0.1/assets/search.js b/release-0.1/assets/search.js
new file mode 100644
index 00000000..5eb7fee8
--- /dev/null
+++ b/release-0.1/assets/search.js
@@ -0,0 +1,243 @@
+/*
+ * Part of Documenter.jl
+ *     https://github.com/JuliaDocs/Documenter.jl
+ *
+ * License: MIT
+ */
+
+// parseUri 1.2.2
+// (c) Steven Levithan 
+// MIT License
+function parseUri (str) {
+	var	o   = parseUri.options,
+		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
+		uri = {},
+		i   = 14;
+
+	while (i--) uri[o.key[i]] = m[i] || "";
+
+	uri[o.q.name] = {};
+	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
+		if ($1) uri[o.q.name][$1] = $2;
+	});
+
+	return uri;
+};
+parseUri.options = {
+	strictMode: false,
+	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
+	q:   {
+		name:   "queryKey",
+		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
+	},
+	parser: {
+		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
+		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
+	}
+};
+
+requirejs.config({
+    paths: {
+        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
+        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.1.3/lunr.min',
+        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
+    }
+});
+
+var currentScript = document.currentScript;
+
+require(["jquery", "lunr", "lodash"], function($, lunr, _) {
+    $("#search-form").submit(function(e) {
+        e.preventDefault()
+    })
+
+    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
+    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
+    // ideally we'd just filter the original list but it's not available as a variable
+    lunr.stopWordFilter = lunr.generateStopWordFilter([
+        'a',
+        'able',
+        'about',
+        'across',
+        'after',
+        'almost',
+        'also',
+        'am',
+        'among',
+        'an',
+        'and',
+        'are',
+        'as',
+        'at',
+        'be',
+        'because',
+        'been',
+        'but',
+        'by',
+        'can',
+        'cannot',
+        'could',
+        'dear',
+        'did',
+        'does',
+        'either',
+        'ever',
+        'every',
+        'from',
+        'got',
+        'had',
+        'has',
+        'have',
+        'he',
+        'her',
+        'hers',
+        'him',
+        'his',
+        'how',
+        'however',
+        'i',
+        'if',
+        'into',
+        'it',
+        'its',
+        'just',
+        'least',
+        'like',
+        'likely',
+        'may',
+        'me',
+        'might',
+        'most',
+        'must',
+        'my',
+        'neither',
+        'no',
+        'nor',
+        'not',
+        'of',
+        'off',
+        'often',
+        'on',
+        'only',
+        'or',
+        'other',
+        'our',
+        'own',
+        'rather',
+        'said',
+        'say',
+        'says',
+        'she',
+        'should',
+        'since',
+        'so',
+        'some',
+        'than',
+        'that',
+        'the',
+        'their',
+        'them',
+        'then',
+        'there',
+        'these',
+        'they',
+        'this',
+        'tis',
+        'to',
+        'too',
+        'twas',
+        'us',
+        'wants',
+        'was',
+        'we',
+        'were',
+        'what',
+        'when',
+        'who',
+        'whom',
+        'why',
+        'will',
+        'would',
+        'yet',
+        'you',
+        'your'
+        ])
+
+    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
+    // would not find anything if searching for "add!", only for the entire qualification
+    lunr.tokenizer.separator = /[\s\-\.]+/
+
+    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
+    lunr.trimmer = function (token) {
+        return token.update(function (s) {
+            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
+        })
+    }
+
+    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
+    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
+
+    var index = lunr(function () {
+        this.ref('location')
+        this.field('title')
+        this.field('text')
+        documenterSearchIndex['docs'].forEach(function(e) {
+            this.add(e)
+        }, this)
+    })
+    var store = {}
+
+    documenterSearchIndex['docs'].forEach(function(e) {
+        store[e.location] = {title: e.title, category: e.category}
+    })
+
+    $(function(){
+        function update_search(querystring) {
+            tokens = lunr.tokenizer(querystring)
+            results = index.query(function (q) {
+                tokens.forEach(function (t) {
+                    q.term(t.toString(), {
+                        fields: ["title"],
+                        boost: 10,
+                        usePipeline: false,
+                        editDistance: 2,
+                        wildcard: lunr.Query.wildcard.NONE
+                    })
+                    q.term(t.toString(), {
+                        fields: ["text"],
+                        boost: 1,
+                        usePipeline: true,
+                        editDistance: 2,
+                        wildcard: lunr.Query.wildcard.NONE
+                    })
+                })
+            })
+            $('#search-info').text("Number of results: " + results.length)
+            $('#search-results').empty()
+            results.forEach(function(result) {
+                data = store[result.ref]
+                link = $('')
+                link.text(data.title)
+                link.attr('href', documenterBaseURL+'/'+result.ref)
+                cat = $('('+data.category+')')
+                li = $('
  • ').append(link).append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/release-0.1/index.html b/release-0.1/index.html new file mode 100644 index 00000000..1229b529 --- /dev/null +++ b/release-0.1/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl diff --git a/release-0.1/lib/methods.html b/release-0.1/lib/methods.html new file mode 100644 index 00000000..5ffd8f61 --- /dev/null +++ b/release-0.1/lib/methods.html @@ -0,0 +1,2 @@ + +Methods · MathematicalSystems.jl

    Methods

    Methods

    This section describes systems methods implemented in MathematicalSystems.jl.

    States

    statedim(s::AbstractSystem)

    Returns the dimension of the state space of system s.

    source
    stateset(s::AbstractSystem)

    Returns the set of allowed states of system s.

    source

    Inputs

    inputdim(s::AbstractSystem)

    Returns the dimension of the input space of system s.

    source
    inputset(s::AbstractSystem)

    Returns the set of allowed inputs of system s.

    source
    nextinput(input::ConstantInput, n::Int=1)

    Returns the first n elements of this input.

    Input

    • input – a constant input

    • n – (optional, default: 1) the number of desired elements

    Output

    A repeated iterator that generates n equal samples of this input.

    source
    nextinput(input::VaryingInput, n::Int=1)

    Returns the first n elements of this input.

    Input

    • input – varying input

    • n – (optional, default: 1) number of desired elements

    Output

    An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

    source
    diff --git a/release-0.1/lib/types.html b/release-0.1/lib/types.html new file mode 100644 index 00000000..e518a8a4 --- /dev/null +++ b/release-0.1/lib/types.html @@ -0,0 +1,60 @@ + +Types · MathematicalSystems.jl

    Types

    Types

    This section describes systems types implemented in MathematicalSystems.jl.

    Abstract Systems

    AbstractSystem

    Abstract supertype for all system types.

    source
    AbstractContinuousSystem

    Abstract supertype for all continuous system types.

    source
    AbstractDiscreteSystem

    Abstract supertype for all discrete system types.

    source

    Continuous Systems

    ContinuousIdentitySystem <: AbstractContinuousSystem

    Trivial identity continuous-time system of the form

    \[x' = 0.\]
    source
    ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

    Trivial identity continuous-time system with state constraints of the form

    \[x' = 0, x(t) ∈ \mathcal{X}.\]
    source
    LinearContinuousSystem

    Continuous-time linear system of the form

    \[x' = A x.\]

    Fields

    • A – square matrix

    source
    LinearControlContinuousSystem

    Continuous-time linear control system of the form

    \[x' = A x + B u.\]

    Fields

    • A – square matrix

    • B – matrix

    source
    ConstrainedLinearContinuousSystem

    Continuous-time linear system with state constraints of the form

    \[x' = A x, x(t) ∈ \mathcal{X}.\]

    Fields

    • A – square matrix

    • X – state constraints

    source
    ConstrainedLinearControlContinuousSystem

    Continuous-time linear control system with state constraints of the form

    \[x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

    Fields

    • A – square matrix

    • B – matrix

    • X – state constraints

    • U – input constraints

    source
    LinearAlgebraicContinuousSystem

    Continuous-time linear algebraic system of the form

    \[E x' = A x.\]

    Fields

    • A – matrix

    • E – matrix, same size as A

    source
    ConstrainedLinearAlgebraicContinuousSystem

    Continuous-time linear system with state constraints of the form

    \[E x' = A x, x(t) ∈ \mathcal{X}.\]

    Fields

    • A – matrix

    • E – matrix, same size as A

    • X – state constraints

    source

    Discrete Systems

    DiscreteIdentitySystem <: AbstractDiscreteSystem

    Trivial identity discrete-time system of the form

    \[x_{k+1} = x_k.\]
    source
    ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

    Trivial identity discrete-time system with state constraints of the form

    \[x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]
    source
    LinearDiscreteSystem

    Discrete-time linear system of the form

    \[x_{k+1} = A x_k.\]

    Fields

    • A – square matrix

    source
    LinearControlDiscreteSystem

    Discrete-time linear control system of the form

    \[x_{k+1} = A x_k + B u_k.\]

    Fields

    • A – square matrix

    • B – matrix

    source
    ConstrainedLinearDiscreteSystem

    Discrete-time linear system with state constraints of the form

    \[x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

    Fields

    • A – square matrix

    • X – state constraints

    source
    ConstrainedLinearControlDiscreteSystem

    Discrete-time linear control system with state constraints of the form

    \[x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

    Fields

    • A – square matrix

    • B – matrix

    • X – state constraints

    • U – input constraints

    source
    LinearAlgebraicDiscreteSystem

    Discrete-time linear algebraic system of the form

    \[E x_{k+1} = A x_k.\]

    Fields

    • A – matrix

    • E – matrix, same size as A

    source
    ConstrainedLinearAlgebraicDiscreteSystem

    Discrete-time linear system with state constraints of the form

    \[E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

    Fields

    • A – matrix

    • E – matrix, same size as A

    • X – state constraints

    source

    Initial Value Problems

    InitialValueProblem

    Parametric composite type for initial value problems. It is parameterized in the system's type.

    Fields

    • s – system

    • x0 – initial state

    Examples

    The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

    julia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);
    +
    +julia> p.x0
    +2-element Array{Float64,1}:
    + -0.5
    +  0.5
    +julia> statedim(p)
    +  2
    +julia> inputdim(p)
    +  0
    source
    IVP

    IVP is an alias for InitialValueProblem.

    source

    Input Types

    AbstractInput

    Abstract supertype for all input types.

    Notes

    The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

    Iteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

    A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

    source
    ConstantInput{UT} <: AbstractInput

    Type representing an input that remains constant in time.

    Fields

    • U – input set

    Examples

    The constant input holds a single element and its length is infinite. To access the field U, you can use Base's next given a state, or the method nextinput given the number of desired input elements:

    julia> c = ConstantInput(-1//2)
    +MathematicalSystems.ConstantInput{Rational{Int64}}(-1//2)
    +
    +julia> next(c, 1)
    +(-1//2, nothing)
    +
    +julia> next(c, 2)
    +(-1//2, nothing)
    +
    +julia> collect(nextinput(c, 4))
    +4-element Array{Rational{Int64},1}:
    + -1//2
    + -1//2
    + -1//2
    + -1//2

    The elements of this input are rational numbers:

    julia> eltype(c)
    +Rational{Int64}

    To transform a constant input, you can use map as in:

    julia> map(x->2*x, c)
    +MathematicalSystems.ConstantInput{Rational{Int64}}(-1//1)
    source
    VaryingInput{UT} <: AbstractInput

    Type representing an input that may vary with time.

    Fields

    • U – vector of input sets

    Examples

    The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

    julia> v = VaryingInput([-1//2, 1//2])
    +MathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])
    +
    +julia> length(v)
    +2
    +
    +julia> eltype(v)
    +Rational{Int64}

    Base's next method receives the input and an integer state and returns the input element and the next iteration state:

    julia> next(v, 1)
    +(-1//2, 2)
    +
    +julia> next(v, 2)
    +(1//2, 3)

    The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

    julia> typeof(nextinput(v))
    +Base.Iterators.Take{MathematicalSystems.VaryingInput{Rational{Int64}}}
    +
    +julia> collect(nextinput(v, 1))
    +1-element Array{Rational{Int64},1}:
    + -1//2
    +
    +julia> collect(nextinput(v, 2))
    +2-element Array{Rational{Int64},1}:
    + -1//2
    +  1//2

    You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

    julia> collect(v)
    +2-element Array{Rational{Int64},1}:
    + -1//2
    +  1//2
    +
    +julia> [2*vi for vi in v]
    +2-element Array{Rational{Int64},1}:
    + -1//1
    +  1//1

    Since this input type is finite, querying more elements than its length returns the full vector:

    julia> collect(nextinput(v, 4))
    +2-element Array{Rational{Int64},1}:
    + -1//2
    +  1//2

    To transform a varying input, you can use map as in:

    julia> map(x->2*x, v)
    +MathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])
    source
    diff --git a/release-0.1/search.html b/release-0.1/search.html new file mode 100644 index 00000000..c2092db7 --- /dev/null +++ b/release-0.1/search.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

    Search

    Search

    Number of results: loading...

      diff --git a/release-0.1/search_index.js b/release-0.1/search_index.js new file mode 100644 index 00000000..ff2b3698 --- /dev/null +++ b/release-0.1/search_index.js @@ -0,0 +1,419 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "index.html#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "index.html#MathematicalSystems.jl-1", + "page": "Home", + "title": "MathematicalSystems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]MathematicalSystems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "index.html#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled,linear algebraic, etc.Iterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "index.html#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types.html#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types.html#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in MathematicalSystems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form\n\nx = 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form\n\nx = 0x(t) mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form\n\nx = A x\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form\n\nx = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nx = A xx(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form\n\nx = A x + B ux(t) mathcalXu(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form\n\nE x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nE x = A xx(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.DiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form\n\nx_k+1 = x_k\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form\n\nx_k+1 = x_kx_k mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form\n\nx_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form\n\nx_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nx_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form\n\nx_k+1 = A x_k + B u_kx_k mathcalXu_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form\n\nE x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nE x_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.InitialValueProblem", + "page": "Types", + "title": "MathematicalSystems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\njulia> statedim(p)\n 2\njulia> inputdim(p)\n 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.IVP", + "page": "Types", + "title": "MathematicalSystems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractInput", + "page": "Types", + "title": "MathematicalSystems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstantInput", + "page": "Types", + "title": "MathematicalSystems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s next given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nMathematicalSystems.ConstantInput{Rational{Int64}}(-1//2)\n\njulia> next(c, 1)\n(-1//2, nothing)\n\njulia> next(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nMathematicalSystems.ConstantInput{Rational{Int64}}(-1//1)\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.VaryingInput", + "page": "Types", + "title": "MathematicalSystems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nMathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s next method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> next(v, 1)\n(-1//2, 2)\n\njulia> next(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{MathematicalSystems.VaryingInput{Rational{Int64}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nMathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n" +}, + +{ + "location": "lib/types.html#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/methods.html#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods.html#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in MathematicalSystems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.statedim", + "page": "Methods", + "title": "MathematicalSystems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.stateset", + "page": "Methods", + "title": "MathematicalSystems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputdim", + "page": "Methods", + "title": "MathematicalSystems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputset", + "page": "Methods", + "title": "MathematicalSystems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.nextinput", + "page": "Methods", + "title": "MathematicalSystems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "about.html#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about.html#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about.html#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about.html#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about.html#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"MathematicalSystems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about.html#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about.html#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about.html#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to MathematicalSystems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/release-0.1/siteinfo.js b/release-0.1/siteinfo.js new file mode 100644 index 00000000..7ae6d02d --- /dev/null +++ b/release-0.1/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "release-0.1"; diff --git a/release-0.2/about.html b/release-0.2/about.html new file mode 100644 index 00000000..d4843f0d --- /dev/null +++ b/release-0.2/about.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

      About

      About

      This page contains some general information about this project, and recommendations about contributing.

      Contributing

      If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

      Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

      Branches and pull requests (PR)

      We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

      Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

      Unit testing and continuous integration (CI)

      This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

      When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

      $ julia --color=yes test/runtests.jl

      Alternatively, you can achieve the same from inside the REPL using the following command:

      julia> Pkg.test("MathematicalSystems")

      We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

      Contributing to the documentation

      New functions and types should be documented according to our guidelines directly in the source code.

      You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

      julia> ?LinearContinuousSystem

      This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

      To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

      $ julia --color=yes docs/make.jl

      Note that this also runs all doctests which will take some time.

      Related projects

      This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

      Below we list more related projects.

      Package nameDescription
      HybridSystems.jlHybrid Systems definitions in Julia.
      LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
      ControlToolbox.jlAnalysis and design tools for control systems.
      ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
      DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
      ControlSystems.jlA Control Systems Toolbox for Julia
      ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

      Credits

      These persons have contributed to MathematicalSystems.jl (in alphabetic order):

      diff --git a/release-0.2/assets/arrow.svg b/release-0.2/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/release-0.2/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/release-0.2/assets/documenter.css b/release-0.2/assets/documenter.css new file mode 100644 index 00000000..26c8166f --- /dev/null +++ b/release-0.2/assets/documenter.css @@ -0,0 +1,573 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

      the is very first thing on the page (i.e. the second element + * in the
      , * after the
      , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
       surrounding the , while
      + * highlight.js applies the .hljs style directly to the  tag.
      + */
      +.hljs {
      +    background-color: transparent;
      +    padding: 0;
      +}
      +
      +@media only screen and (max-width: 768px) {
      +    nav.toc {
      +        position: fixed;
      +        overflow-y: scroll;
      +        width: 16em;
      +        left: -16em;
      +        -webkit-overflow-scrolling: touch;
      +        -webkit-transition-property: left; /* Safari */
      +        -webkit-transition-duration: 0.3s; /* Safari */
      +        transition-property: left;
      +        transition-duration: 0.3s;
      +        -webkit-transition-timing-function: ease-out; /* Safari */
      +        transition-timing-function: ease-out;
      +        z-index: 2;
      +    }
      +
      +    nav.toc.show {
      +        left: 0;
      +    }
      +
      +    article {
      +        margin-left: 0;
      +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
      +        overflow-wrap: break-word;
      +    }
      +
      +    article > header {
      +        position: fixed;
      +        left: 0;
      +        z-index: 1;
      +    }
      +
      +    article > header nav, hr {
      +        display: none;
      +    }
      +
      +    article > header div#topbar {
      +        display: block; /* is mobile */
      +        position: fixed;
      +        width: 100%;
      +        height: 1.5em;
      +        padding-top: 1em;
      +        padding-bottom: 1em;
      +        background-color: #fcfcfc;
      +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
      +        top: 0;
      +        -webkit-transition-property: top; /* Safari */
      +        -webkit-transition-duration: 0.3s; /* Safari */
      +        transition-property: top;
      +        transition-duration: 0.3s;
      +    }
      +
      +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
      +        top: -4em;
      +        -webkit-transition-property: top; /* Safari */
      +        -webkit-transition-duration: 0.7s; /* Safari */
      +        transition-property: top;
      +        transition-duration: 0.7s;
      +    }
      +
      +    article > header div#topbar span {
      +        position: fixed;
      +        width: 80%;
      +        height: 1.5em;
      +        margin-top: -0.1em;
      +        margin-left: 0.9em;
      +        font-size: 1.2em;
      +        overflow: hidden;
      +    }
      +
      +    article > header div#topbar a.fa-bars {
      +        float: right;
      +        padding: 0.6em;
      +        margin-top: -0.6em;
      +        margin-right: 0.3em;
      +        font-size: 1.5em;
      +    }
      +
      +    article > header div#topbar a.fa-bars:visited {
      +        color: #3091d1;
      +    }
      +
      +    article table {
      +        overflow-x: auto;
      +        display: block;
      +    }
      +
      +    article div.MathJax_Display {
      +        overflow: scroll;
      +    }
      +
      +    article span.MathJax {
      +        overflow: hidden;
      +    }
      +}
      +
      +@media only screen and (max-width: 320px) {
      +    body {
      +        font-size: 15px;
      +    }
      +}
      diff --git a/release-0.2/assets/documenter.js b/release-0.2/assets/documenter.js
      new file mode 100644
      index 00000000..5d31622f
      --- /dev/null
      +++ b/release-0.2/assets/documenter.js
      @@ -0,0 +1,129 @@
      +/*
      + * Part of Documenter.jl
      + *     https://github.com/JuliaDocs/Documenter.jl
      + *
      + * License: MIT
      + */
      +
      +requirejs.config({
      +    paths: {
      +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
      +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
      +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
      +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
      +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
      +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
      +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
      +    },
      +    shim: {
      +        'mathjax' : {
      +            exports: "MathJax"
      +        },
      +        'highlight-julia': ['highlight'],
      +        'highlight-julia-repl': ['highlight'],
      +    }
      +});
      +
      +// Load MathJax
      +require(['mathjax'], function(MathJax) {
      +    MathJax.Hub.Config({
      +      "tex2jax": {
      +        inlineMath: [['$','$'], ['\\(','\\)']],
      +        processEscapes: true
      +      }
      +    });
      +    MathJax.Hub.Config({
      +      config: ["MMLorHTML.js"],
      +      jax: [
      +        "input/TeX",
      +        "output/HTML-CSS",
      +        "output/NativeMML"
      +      ],
      +      extensions: [
      +        "MathMenu.js",
      +        "MathZoom.js",
      +        "TeX/AMSmath.js",
      +        "TeX/AMSsymbols.js",
      +        "TeX/autobold.js",
      +        "TeX/autoload-all.js"
      +      ]
      +    });
      +    MathJax.Hub.Config({
      +      TeX: { equationNumbers: { autoNumber: "AMS" } }
      +    });
      +})
      +
      +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
      +    $(document).ready(function() {
      +        hljs.initHighlighting();
      +    })
      +
      +})
      +
      +// update the version selector with info from the siteinfo.js and ../versions.js files
      +require(['jquery'], function($) {
      +    $(document).ready(function() {
      +        var version_selector = $("#version-selector");
      +
      +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
      +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
      +            var option = $("");
      +            version_selector.append(option);
      +        }
      +
      +        if (typeof DOC_VERSIONS !== 'undefined') {
      +            var existing_versions = $('#version-selector > option');
      +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
      +            DOC_VERSIONS.forEach(function(each) {
      +                var version_url = documenterBaseURL + "/../" + each;
      +                var existing_id = $.inArray(each, existing_versions_texts);
      +                // if not already in the version selector, add it as a new option,
      +                // otherwise update the old option with the URL and enable it
      +                if (existing_id == -1) {
      +                    var option = $("");
      +                    version_selector.append(option);
      +                } else {
      +                    var option = existing_versions[existing_id];
      +                    option.value = version_url;
      +                    option.disabled = false;
      +                }
      +            });
      +        }
      +
      +        // only show the version selector if the selector has been populated
      +        if ($('#version-selector > option').length > 0) {
      +            version_selector.css("visibility", "visible");
      +        }
      +    })
      +
      +})
      +
      +// mobile
      +require(['jquery', 'headroom'], function($, Headroom) {
      +    $(document).ready(function() {
      +        var navtoc = $("nav.toc");
      +        $("nav.toc li.current a.toctext").click(function() {
      +            navtoc.toggleClass('show');
      +        });
      +        $("article > header div#topbar a.fa-bars").click(function(ev) {
      +            ev.preventDefault();
      +            navtoc.toggleClass('show');
      +            if (navtoc.hasClass('show')) {
      +                var title = $("article > header div#topbar span").text();
      +                $("nav.toc ul li a:contains('" + title + "')").focus();
      +            }
      +        });
      +        $("article#docs").bind('click', function(ev) {
      +            if ($(ev.target).is('div#topbar a.fa-bars')) {
      +                return;
      +            }
      +            if (navtoc.hasClass('show')) {
      +                navtoc.removeClass('show');
      +            }
      +        });
      +        if ($("article > header div#topbar").css('display') == 'block') {
      +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
      +            headroom.init();
      +        }
      +    })
      +})
      diff --git a/release-0.2/assets/juliareach.css b/release-0.2/assets/juliareach.css
      new file mode 100644
      index 00000000..64b0d92d
      --- /dev/null
      +++ b/release-0.2/assets/juliareach.css
      @@ -0,0 +1,583 @@
      +/*
      + * The default CSS style for Documenter.jl generated sites
      + *
      + * Heavily inspired by the Julia Sphinx theme
      + *     https://github.com/JuliaLang/JuliaDoc
      + * which extends the sphinx_rtd_theme
      + *     https://github.com/snide/sphinx_rtd_theme
      + *
      + * Part of Documenter.jl
      + *     https://github.com/JuliaDocs/Documenter.jl
      + *
      + * License: MIT
      + */
      +
      +/* The original CSS is modified such that it right-justifies the text. */
      +
      +/* fonts */
      +body, input {
      +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
      +  font-size: 16px;
      +  color: #222;
      +  text-rendering: optimizeLegibility;
      +}
      +
      +pre, code, kbd {
      +  font-family: 'Roboto Mono', Monaco, courier, monospace;
      +  font-size: 0.90em;
      +}
      +
      +pre code {
      +  font-size: 1em;
      +}
      +
      +a {
      +    color: #2980b9;
      +    text-decoration: none;
      +}
      +
      +a:hover {
      +    color: #3091d1;
      +}
      +
      +a:visited {
      +    color: #9b59b6;
      +}
      +
      +body {
      +    line-height: 1.5;
      +}
      +
      +h1 {
      +    font-size: 1.75em;
      +}
      +
      +/* Unless the 

      the is very first thing on the page (i.e. the second element + * in the
      , * after the
      , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
       surrounding the , while
      + * highlight.js applies the .hljs style directly to the  tag.
      + */
      +.hljs {
      +    background-color: transparent;
      +    padding: 0;
      +}
      +
      +@media only screen and (max-width: 768px) {
      +    nav.toc {
      +        position: fixed;
      +        overflow-y: scroll;
      +        width: 16em;
      +        left: -16em;
      +        -webkit-overflow-scrolling: touch;
      +        -webkit-transition-property: left; /* Safari */
      +        -webkit-transition-duration: 0.3s; /* Safari */
      +        transition-property: left;
      +        transition-duration: 0.3s;
      +        -webkit-transition-timing-function: ease-out; /* Safari */
      +        transition-timing-function: ease-out;
      +        z-index: 2;
      +    }
      +
      +    nav.toc.show {
      +        left: 0;
      +    }
      +
      +    article {
      +        margin-left: 0;
      +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
      +        overflow-wrap: break-word;
      +    }
      +
      +    article > header {
      +        position: fixed;
      +        left: 0;
      +        z-index: 1;
      +    }
      +
      +    article > header nav, hr {
      +        display: none;
      +    }
      +
      +    article > header div#topbar {
      +        display: block; /* is mobile */
      +        position: fixed;
      +        width: 100%;
      +        height: 1.5em;
      +        padding-top: 1em;
      +        padding-bottom: 1em;
      +        background-color: #fcfcfc;
      +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
      +        top: 0;
      +        -webkit-transition-property: top; /* Safari */
      +        -webkit-transition-duration: 0.3s; /* Safari */
      +        transition-property: top;
      +        transition-duration: 0.3s;
      +    }
      +
      +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
      +        top: -4em;
      +        -webkit-transition-property: top; /* Safari */
      +        -webkit-transition-duration: 0.7s; /* Safari */
      +        transition-property: top;
      +        transition-duration: 0.7s;
      +    }
      +
      +    article > header div#topbar span {
      +        position: fixed;
      +        width: 80%;
      +        height: 1.5em;
      +        margin-top: -0.1em;
      +        margin-left: 0.9em;
      +        font-size: 1.2em;
      +        overflow: hidden;
      +    }
      +
      +    article > header div#topbar a.fa-bars {
      +        float: right;
      +        padding: 0.6em;
      +        margin-top: -0.6em;
      +        margin-right: 0.3em;
      +        font-size: 1.5em;
      +    }
      +
      +    article > header div#topbar a.fa-bars:visited {
      +        color: #3091d1;
      +    }
      +
      +    article table {
      +        overflow-x: auto;
      +        display: block;
      +    }
      +
      +    article div.MathJax_Display {
      +        overflow: scroll;
      +    }
      +
      +    article span.MathJax {
      +        overflow: hidden;
      +    }
      +}
      +
      +@media only screen and (max-width: 320px) {
      +    body {
      +        font-size: 15px;
      +    }
      +}
      diff --git a/release-0.2/assets/search.js b/release-0.2/assets/search.js
      new file mode 100644
      index 00000000..f99b3786
      --- /dev/null
      +++ b/release-0.2/assets/search.js
      @@ -0,0 +1,250 @@
      +/*
      + * Part of Documenter.jl
      + *     https://github.com/JuliaDocs/Documenter.jl
      + *
      + * License: MIT
      + */
      +
      +// parseUri 1.2.2
      +// (c) Steven Levithan 
      +// MIT License
      +function parseUri (str) {
      +	var	o   = parseUri.options,
      +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
      +		uri = {},
      +		i   = 14;
      +
      +	while (i--) uri[o.key[i]] = m[i] || "";
      +
      +	uri[o.q.name] = {};
      +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
      +		if ($1) uri[o.q.name][$1] = $2;
      +	});
      +
      +	return uri;
      +};
      +parseUri.options = {
      +	strictMode: false,
      +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
      +	q:   {
      +		name:   "queryKey",
      +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
      +	},
      +	parser: {
      +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
      +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
      +	}
      +};
      +
      +requirejs.config({
      +    paths: {
      +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
      +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.1/lunr.min',
      +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
      +    }
      +});
      +
      +var currentScript = document.currentScript;
      +
      +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
      +    $("#search-form").submit(function(e) {
      +        e.preventDefault()
      +    })
      +
      +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
      +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
      +    // ideally we'd just filter the original list but it's not available as a variable
      +    lunr.stopWordFilter = lunr.generateStopWordFilter([
      +        'a',
      +        'able',
      +        'about',
      +        'across',
      +        'after',
      +        'almost',
      +        'also',
      +        'am',
      +        'among',
      +        'an',
      +        'and',
      +        'are',
      +        'as',
      +        'at',
      +        'be',
      +        'because',
      +        'been',
      +        'but',
      +        'by',
      +        'can',
      +        'cannot',
      +        'could',
      +        'dear',
      +        'did',
      +        'does',
      +        'either',
      +        'ever',
      +        'every',
      +        'from',
      +        'got',
      +        'had',
      +        'has',
      +        'have',
      +        'he',
      +        'her',
      +        'hers',
      +        'him',
      +        'his',
      +        'how',
      +        'however',
      +        'i',
      +        'if',
      +        'into',
      +        'it',
      +        'its',
      +        'just',
      +        'least',
      +        'like',
      +        'likely',
      +        'may',
      +        'me',
      +        'might',
      +        'most',
      +        'must',
      +        'my',
      +        'neither',
      +        'no',
      +        'nor',
      +        'not',
      +        'of',
      +        'off',
      +        'often',
      +        'on',
      +        'only',
      +        'or',
      +        'other',
      +        'our',
      +        'own',
      +        'rather',
      +        'said',
      +        'say',
      +        'says',
      +        'she',
      +        'should',
      +        'since',
      +        'so',
      +        'some',
      +        'than',
      +        'that',
      +        'the',
      +        'their',
      +        'them',
      +        'then',
      +        'there',
      +        'these',
      +        'they',
      +        'this',
      +        'tis',
      +        'to',
      +        'too',
      +        'twas',
      +        'us',
      +        'wants',
      +        'was',
      +        'we',
      +        'were',
      +        'what',
      +        'when',
      +        'who',
      +        'whom',
      +        'why',
      +        'will',
      +        'would',
      +        'yet',
      +        'you',
      +        'your'
      +        ])
      +
      +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
      +    // would not find anything if searching for "add!", only for the entire qualification
      +    lunr.tokenizer.separator = /[\s\-\.]+/
      +
      +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
      +    lunr.trimmer = function (token) {
      +        return token.update(function (s) {
      +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
      +        })
      +    }
      +
      +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
      +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
      +
      +    var index = lunr(function () {
      +        this.ref('location')
      +        this.field('title')
      +        this.field('text')
      +        documenterSearchIndex['docs'].forEach(function(e) {
      +            this.add(e)
      +        }, this)
      +    })
      +    var store = {}
      +
      +    documenterSearchIndex['docs'].forEach(function(e) {
      +        store[e.location] = {title: e.title, category: e.category}
      +    })
      +
      +    $(function(){
      +        function update_search(querystring) {
      +            tokens = lunr.tokenizer(querystring)
      +            results = index.query(function (q) {
      +                tokens.forEach(function (t) {
      +                    q.term(t.toString(), {
      +                        fields: ["title"],
      +                        boost: 100,
      +                        usePipeline: false,
      +                        editDistance: 0,
      +                        wildcard: lunr.Query.wildcard.NONE
      +                    })
      +                    q.term(t.toString(), {
      +                        fields: ["title"],
      +                        boost: 10,
      +                        usePipeline: false,
      +                        editDistance: 2,
      +                        wildcard: lunr.Query.wildcard.NONE
      +                    })
      +                    q.term(t.toString(), {
      +                        fields: ["text"],
      +                        boost: 1,
      +                        usePipeline: true,
      +                        editDistance: 0,
      +                        wildcard: lunr.Query.wildcard.NONE
      +                    })
      +                })
      +            })
      +            $('#search-info').text("Number of results: " + results.length)
      +            $('#search-results').empty()
      +            results.forEach(function(result) {
      +                data = store[result.ref]
      +                link = $('')
      +                link.text(data.title)
      +                link.attr('href', documenterBaseURL+'/'+result.ref)
      +                cat = $('('+data.category+')')
      +                li = $('
    • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/release-0.2/index.html b/release-0.2/index.html new file mode 100644 index 00000000..1229b529 --- /dev/null +++ b/release-0.2/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl diff --git a/release-0.2/lib/methods.html b/release-0.2/lib/methods.html new file mode 100644 index 00000000..3f57fbda --- /dev/null +++ b/release-0.2/lib/methods.html @@ -0,0 +1,2 @@ + +Methods · MathematicalSystems.jl

      Methods

      Methods

      This section describes systems methods implemented in MathematicalSystems.jl.

      States

      statedim(s::AbstractSystem)

      Returns the dimension of the state space of system s.

      source
      stateset(s::AbstractSystem)

      Returns the set of allowed states of system s.

      source

      Inputs

      inputdim(s::AbstractSystem)

      Returns the dimension of the input space of system s.

      source
      inputset(s::AbstractSystem)

      Returns the set of allowed inputs of system s.

      source
      nextinput(input::ConstantInput, n::Int=1)

      Returns the first n elements of this input.

      Input

      • input – a constant input

      • n – (optional, default: 1) the number of desired elements

      Output

      A repeated iterator that generates n equal samples of this input.

      source
      nextinput(input::VaryingInput, n::Int=1)

      Returns the first n elements of this input.

      Input

      • input – varying input

      • n – (optional, default: 1) number of desired elements

      Output

      An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

      source
      diff --git a/release-0.2/lib/types.html b/release-0.2/lib/types.html new file mode 100644 index 00000000..a560ed7f --- /dev/null +++ b/release-0.2/lib/types.html @@ -0,0 +1,62 @@ + +Types · MathematicalSystems.jl

      Types

      Types

      This section describes systems types implemented in MathematicalSystems.jl.

      Abstract Systems

      AbstractSystem

      Abstract supertype for all system types.

      source
      AbstractContinuousSystem

      Abstract supertype for all continuous system types.

      source
      AbstractDiscreteSystem

      Abstract supertype for all discrete system types.

      source

      Continuous Systems

      ContinuousIdentitySystem <: AbstractContinuousSystem

      Trivial identity continuous-time system of the form

      \[x' = 0.\]
      source
      ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

      Trivial identity continuous-time system with state constraints of the form

      \[x' = 0, x(t) ∈ \mathcal{X}.\]
      source
      LinearContinuousSystem

      Continuous-time linear system of the form

      \[x' = A x.\]

      Fields

      • A – square matrix

      source
      LinearControlContinuousSystem

      Continuous-time linear control system of the form

      \[x' = A x + B u.\]

      Fields

      • A – square matrix

      • B – matrix

      source
      ConstrainedLinearContinuousSystem

      Continuous-time linear system with state constraints of the form

      \[x' = A x, x(t) ∈ \mathcal{X}.\]

      Fields

      • A – square matrix

      • X – state constraints

      source
      ConstrainedLinearControlContinuousSystem

      Continuous-time linear control system with state constraints of the form

      \[x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

      Fields

      • A – square matrix

      • B – matrix

      • X – state constraints

      • U – input constraints

      source
      LinearAlgebraicContinuousSystem

      Continuous-time linear algebraic system of the form

      \[E x' = A x.\]

      Fields

      • A – matrix

      • E – matrix, same size as A

      source
      ConstrainedLinearAlgebraicContinuousSystem

      Continuous-time linear system with state constraints of the form

      \[E x' = A x, x(t) ∈ \mathcal{X}.\]

      Fields

      • A – matrix

      • E – matrix, same size as A

      • X – state constraints

      source
      PolynomialContinuousSystem

      Continuous-time polynomial system of the form

      \[x' = p(x).\]

      Fields

      • p – polynomial

      • statedim – number of state variables

      source
      ConstrainedPolynomialContinuousSystem

      Continuous-time polynomial system with state constraints,

      \[x' = p(x), x(t) ∈ \mathcal{X}\]

      Fields

      • p – polynomial

      • X – constraint set

      • statedim – number of state variables

      source

      Discrete Systems

      DiscreteIdentitySystem <: AbstractDiscreteSystem

      Trivial identity discrete-time system of the form

      \[x_{k+1} = x_k.\]
      source
      ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

      Trivial identity discrete-time system with state constraints of the form

      \[x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]
      source
      LinearDiscreteSystem

      Discrete-time linear system of the form

      \[x_{k+1} = A x_k.\]

      Fields

      • A – square matrix

      source
      LinearControlDiscreteSystem

      Discrete-time linear control system of the form

      \[x_{k+1} = A x_k + B u_k.\]

      Fields

      • A – square matrix

      • B – matrix

      source
      ConstrainedLinearDiscreteSystem

      Discrete-time linear system with state constraints of the form

      \[x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

      Fields

      • A – square matrix

      • X – state constraints

      source
      ConstrainedLinearControlDiscreteSystem

      Discrete-time linear control system with state constraints of the form

      \[x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

      Fields

      • A – square matrix

      • B – matrix

      • X – state constraints

      • U – input constraints

      source
      LinearAlgebraicDiscreteSystem

      Discrete-time linear algebraic system of the form

      \[E x_{k+1} = A x_k.\]

      Fields

      • A – matrix

      • E – matrix, same size as A

      source
      ConstrainedLinearAlgebraicDiscreteSystem

      Discrete-time linear system with state constraints of the form

      \[E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

      Fields

      • A – matrix

      • E – matrix, same size as A

      • X – state constraints

      source
      PolynomialDiscreteSystem

      Discrete-time polynomial system of the form

      \[x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

      Fields

      • p – polynomial

      • statedim – number of state variables

      source
      ConstrainedPolynomialDiscreteSystem

      Discrete-time polynomial system with state constraints,

      \[x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

      Fields

      • p – polynomial

      • X – constraint set

      • statedim – number of state variables

      source

      Initial Value Problems

      InitialValueProblem

      Parametric composite type for initial value problems. It is parameterized in the system's type.

      Fields

      • s – system

      • x0 – initial state

      Examples

      The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

      julia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);
      +
      +julia> p.x0
      +2-element Array{Float64,1}:
      + -0.5
      +  0.5
      +
      +julia> statedim(p)
      +2
      +
      +julia> inputdim(p)
      +0
      source
      IVP

      IVP is an alias for InitialValueProblem.

      source

      Input Types

      AbstractInput

      Abstract supertype for all input types.

      Notes

      The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

      Iteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

      A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

      source
      ConstantInput{UT} <: AbstractInput

      Type representing an input that remains constant in time.

      Fields

      • U – input set

      Examples

      The constant input holds a single element and its length is infinite. To access the field U, you can use Base's next given a state, or the method nextinput given the number of desired input elements:

      julia> c = ConstantInput(-1//2)
      +MathematicalSystems.ConstantInput{Rational{Int64}}(-1//2)
      +
      +julia> next(c, 1)
      +(-1//2, nothing)
      +
      +julia> next(c, 2)
      +(-1//2, nothing)
      +
      +julia> collect(nextinput(c, 4))
      +4-element Array{Rational{Int64},1}:
      + -1//2
      + -1//2
      + -1//2
      + -1//2

      The elements of this input are rational numbers:

      julia> eltype(c)
      +Rational{Int64}

      To transform a constant input, you can use map as in:

      julia> map(x->2*x, c)
      +MathematicalSystems.ConstantInput{Rational{Int64}}(-1//1)
      source
      VaryingInput{UT} <: AbstractInput

      Type representing an input that may vary with time.

      Fields

      • U – vector of input sets

      Examples

      The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

      julia> v = VaryingInput([-1//2, 1//2])
      +MathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])
      +
      +julia> length(v)
      +2
      +
      +julia> eltype(v)
      +Rational{Int64}

      Base's next method receives the input and an integer state and returns the input element and the next iteration state:

      julia> next(v, 1)
      +(-1//2, 2)
      +
      +julia> next(v, 2)
      +(1//2, 3)

      The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

      julia> typeof(nextinput(v))
      +Base.Iterators.Take{MathematicalSystems.VaryingInput{Rational{Int64}}}
      +
      +julia> collect(nextinput(v, 1))
      +1-element Array{Rational{Int64},1}:
      + -1//2
      +
      +julia> collect(nextinput(v, 2))
      +2-element Array{Rational{Int64},1}:
      + -1//2
      +  1//2

      You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

      julia> collect(v)
      +2-element Array{Rational{Int64},1}:
      + -1//2
      +  1//2
      +
      +julia> [2*vi for vi in v]
      +2-element Array{Rational{Int64},1}:
      + -1//1
      +  1//1

      Since this input type is finite, querying more elements than its length returns the full vector:

      julia> collect(nextinput(v, 4))
      +2-element Array{Rational{Int64},1}:
      + -1//2
      +  1//2

      To transform a varying input, you can use map as in:

      julia> map(x->2*x, v)
      +MathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])
      source
      diff --git a/release-0.2/search.html b/release-0.2/search.html new file mode 100644 index 00000000..c2092db7 --- /dev/null +++ b/release-0.2/search.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

      Search

      Search

      Number of results: loading...

        diff --git a/release-0.2/search_index.js b/release-0.2/search_index.js new file mode 100644 index 00000000..b41f165d --- /dev/null +++ b/release-0.2/search_index.js @@ -0,0 +1,451 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "index.html#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "index.html#MathematicalSystems.jl-1", + "page": "Home", + "title": "MathematicalSystems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]MathematicalSystems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "index.html#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled,linear algebraic, etc.Iterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "index.html#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types.html#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types.html#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in MathematicalSystems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form\n\nx = 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form\n\nx = 0x(t) mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form\n\nx = A x\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form\n\nx = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nx = A xx(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form\n\nx = A x + B ux(t) mathcalXu(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form\n\nE x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nE x = A xx(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.PolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialContinuousSystem", + "category": "type", + "text": "PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form\n\nx = p(x)\n\nFields\n\np – polynomial\nstatedim – number of state variables\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "category": "type", + "text": "ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints,\n\nx = p(x) x(t) mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n" +}, + +{ + "location": "lib/types.html#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.DiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form\n\nx_k+1 = x_k\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form\n\nx_k+1 = x_kx_k mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form\n\nx_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form\n\nx_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nx_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form\n\nx_k+1 = A x_k + B u_kx_k mathcalXu_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form\n\nE x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nE x_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.PolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialDiscreteSystem", + "category": "type", + "text": "PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form\n\nx_k+1 = p(x_k)x_k mathcalX\n\nFields\n\np – polynomial\nstatedim – number of state variables\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "category": "type", + "text": "ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints,\n\nx_k+1 = p(x_k)x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n" +}, + +{ + "location": "lib/types.html#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.InitialValueProblem", + "page": "Types", + "title": "MathematicalSystems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.IVP", + "page": "Types", + "title": "MathematicalSystems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractInput", + "page": "Types", + "title": "MathematicalSystems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstantInput", + "page": "Types", + "title": "MathematicalSystems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s next given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nMathematicalSystems.ConstantInput{Rational{Int64}}(-1//2)\n\njulia> next(c, 1)\n(-1//2, nothing)\n\njulia> next(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nMathematicalSystems.ConstantInput{Rational{Int64}}(-1//1)\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.VaryingInput", + "page": "Types", + "title": "MathematicalSystems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nMathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s next method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> next(v, 1)\n(-1//2, 2)\n\njulia> next(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{MathematicalSystems.VaryingInput{Rational{Int64}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nMathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n" +}, + +{ + "location": "lib/types.html#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/methods.html#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods.html#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in MathematicalSystems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.statedim", + "page": "Methods", + "title": "MathematicalSystems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.stateset", + "page": "Methods", + "title": "MathematicalSystems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputdim", + "page": "Methods", + "title": "MathematicalSystems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputset", + "page": "Methods", + "title": "MathematicalSystems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.nextinput", + "page": "Methods", + "title": "MathematicalSystems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "about.html#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about.html#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about.html#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about.html#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about.html#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"MathematicalSystems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about.html#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about.html#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about.html#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to MathematicalSystems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/release-0.2/siteinfo.js b/release-0.2/siteinfo.js new file mode 100644 index 00000000..f0336ba3 --- /dev/null +++ b/release-0.2/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "release-0.2"; diff --git a/release-0.3/about.html b/release-0.3/about.html new file mode 100644 index 00000000..899a2e2d --- /dev/null +++ b/release-0.3/about.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

        About

        About

        This page contains some general information about this project, and recommendations about contributing.

        Contributing

        If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

        Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

        Branches and pull requests (PR)

        We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

        Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

        Unit testing and continuous integration (CI)

        This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

        When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

        $ julia --color=yes test/runtests.jl

        Alternatively, you can achieve the same from inside the REPL using the following command:

        julia> Pkg.test("MathematicalSystems")

        We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

        Contributing to the documentation

        New functions and types should be documented according to our guidelines directly in the source code.

        You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

        julia> ?LinearContinuousSystem

        This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

        To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

        $ julia --color=yes docs/make.jl

        Note that this also runs all doctests which will take some time.

        Related projects

        This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

        Below we list more related projects.

        Package nameDescription
        HybridSystems.jlHybrid Systems definitions in Julia.
        LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
        ControlToolbox.jlAnalysis and design tools for control systems.
        ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
        DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
        ControlSystems.jlA Control Systems Toolbox for Julia
        ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

        Credits

        These persons have contributed to MathematicalSystems.jl (in alphabetic order):

        diff --git a/release-0.3/assets/arrow.svg b/release-0.3/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/release-0.3/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/release-0.3/assets/documenter.css b/release-0.3/assets/documenter.css new file mode 100644 index 00000000..26c8166f --- /dev/null +++ b/release-0.3/assets/documenter.css @@ -0,0 +1,573 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

        the is very first thing on the page (i.e. the second element + * in the
        , * after the
        , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
         surrounding the , while
        + * highlight.js applies the .hljs style directly to the  tag.
        + */
        +.hljs {
        +    background-color: transparent;
        +    padding: 0;
        +}
        +
        +@media only screen and (max-width: 768px) {
        +    nav.toc {
        +        position: fixed;
        +        overflow-y: scroll;
        +        width: 16em;
        +        left: -16em;
        +        -webkit-overflow-scrolling: touch;
        +        -webkit-transition-property: left; /* Safari */
        +        -webkit-transition-duration: 0.3s; /* Safari */
        +        transition-property: left;
        +        transition-duration: 0.3s;
        +        -webkit-transition-timing-function: ease-out; /* Safari */
        +        transition-timing-function: ease-out;
        +        z-index: 2;
        +    }
        +
        +    nav.toc.show {
        +        left: 0;
        +    }
        +
        +    article {
        +        margin-left: 0;
        +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
        +        overflow-wrap: break-word;
        +    }
        +
        +    article > header {
        +        position: fixed;
        +        left: 0;
        +        z-index: 1;
        +    }
        +
        +    article > header nav, hr {
        +        display: none;
        +    }
        +
        +    article > header div#topbar {
        +        display: block; /* is mobile */
        +        position: fixed;
        +        width: 100%;
        +        height: 1.5em;
        +        padding-top: 1em;
        +        padding-bottom: 1em;
        +        background-color: #fcfcfc;
        +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
        +        top: 0;
        +        -webkit-transition-property: top; /* Safari */
        +        -webkit-transition-duration: 0.3s; /* Safari */
        +        transition-property: top;
        +        transition-duration: 0.3s;
        +    }
        +
        +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
        +        top: -4em;
        +        -webkit-transition-property: top; /* Safari */
        +        -webkit-transition-duration: 0.7s; /* Safari */
        +        transition-property: top;
        +        transition-duration: 0.7s;
        +    }
        +
        +    article > header div#topbar span {
        +        position: fixed;
        +        width: 80%;
        +        height: 1.5em;
        +        margin-top: -0.1em;
        +        margin-left: 0.9em;
        +        font-size: 1.2em;
        +        overflow: hidden;
        +    }
        +
        +    article > header div#topbar a.fa-bars {
        +        float: right;
        +        padding: 0.6em;
        +        margin-top: -0.6em;
        +        margin-right: 0.3em;
        +        font-size: 1.5em;
        +    }
        +
        +    article > header div#topbar a.fa-bars:visited {
        +        color: #3091d1;
        +    }
        +
        +    article table {
        +        overflow-x: auto;
        +        display: block;
        +    }
        +
        +    article div.MathJax_Display {
        +        overflow: scroll;
        +    }
        +
        +    article span.MathJax {
        +        overflow: hidden;
        +    }
        +}
        +
        +@media only screen and (max-width: 320px) {
        +    body {
        +        font-size: 15px;
        +    }
        +}
        diff --git a/release-0.3/assets/documenter.js b/release-0.3/assets/documenter.js
        new file mode 100644
        index 00000000..5d31622f
        --- /dev/null
        +++ b/release-0.3/assets/documenter.js
        @@ -0,0 +1,129 @@
        +/*
        + * Part of Documenter.jl
        + *     https://github.com/JuliaDocs/Documenter.jl
        + *
        + * License: MIT
        + */
        +
        +requirejs.config({
        +    paths: {
        +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
        +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
        +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
        +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
        +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
        +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
        +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
        +    },
        +    shim: {
        +        'mathjax' : {
        +            exports: "MathJax"
        +        },
        +        'highlight-julia': ['highlight'],
        +        'highlight-julia-repl': ['highlight'],
        +    }
        +});
        +
        +// Load MathJax
        +require(['mathjax'], function(MathJax) {
        +    MathJax.Hub.Config({
        +      "tex2jax": {
        +        inlineMath: [['$','$'], ['\\(','\\)']],
        +        processEscapes: true
        +      }
        +    });
        +    MathJax.Hub.Config({
        +      config: ["MMLorHTML.js"],
        +      jax: [
        +        "input/TeX",
        +        "output/HTML-CSS",
        +        "output/NativeMML"
        +      ],
        +      extensions: [
        +        "MathMenu.js",
        +        "MathZoom.js",
        +        "TeX/AMSmath.js",
        +        "TeX/AMSsymbols.js",
        +        "TeX/autobold.js",
        +        "TeX/autoload-all.js"
        +      ]
        +    });
        +    MathJax.Hub.Config({
        +      TeX: { equationNumbers: { autoNumber: "AMS" } }
        +    });
        +})
        +
        +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
        +    $(document).ready(function() {
        +        hljs.initHighlighting();
        +    })
        +
        +})
        +
        +// update the version selector with info from the siteinfo.js and ../versions.js files
        +require(['jquery'], function($) {
        +    $(document).ready(function() {
        +        var version_selector = $("#version-selector");
        +
        +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
        +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
        +            var option = $("");
        +            version_selector.append(option);
        +        }
        +
        +        if (typeof DOC_VERSIONS !== 'undefined') {
        +            var existing_versions = $('#version-selector > option');
        +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
        +            DOC_VERSIONS.forEach(function(each) {
        +                var version_url = documenterBaseURL + "/../" + each;
        +                var existing_id = $.inArray(each, existing_versions_texts);
        +                // if not already in the version selector, add it as a new option,
        +                // otherwise update the old option with the URL and enable it
        +                if (existing_id == -1) {
        +                    var option = $("");
        +                    version_selector.append(option);
        +                } else {
        +                    var option = existing_versions[existing_id];
        +                    option.value = version_url;
        +                    option.disabled = false;
        +                }
        +            });
        +        }
        +
        +        // only show the version selector if the selector has been populated
        +        if ($('#version-selector > option').length > 0) {
        +            version_selector.css("visibility", "visible");
        +        }
        +    })
        +
        +})
        +
        +// mobile
        +require(['jquery', 'headroom'], function($, Headroom) {
        +    $(document).ready(function() {
        +        var navtoc = $("nav.toc");
        +        $("nav.toc li.current a.toctext").click(function() {
        +            navtoc.toggleClass('show');
        +        });
        +        $("article > header div#topbar a.fa-bars").click(function(ev) {
        +            ev.preventDefault();
        +            navtoc.toggleClass('show');
        +            if (navtoc.hasClass('show')) {
        +                var title = $("article > header div#topbar span").text();
        +                $("nav.toc ul li a:contains('" + title + "')").focus();
        +            }
        +        });
        +        $("article#docs").bind('click', function(ev) {
        +            if ($(ev.target).is('div#topbar a.fa-bars')) {
        +                return;
        +            }
        +            if (navtoc.hasClass('show')) {
        +                navtoc.removeClass('show');
        +            }
        +        });
        +        if ($("article > header div#topbar").css('display') == 'block') {
        +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
        +            headroom.init();
        +        }
        +    })
        +})
        diff --git a/release-0.3/assets/juliareach.css b/release-0.3/assets/juliareach.css
        new file mode 100644
        index 00000000..64b0d92d
        --- /dev/null
        +++ b/release-0.3/assets/juliareach.css
        @@ -0,0 +1,583 @@
        +/*
        + * The default CSS style for Documenter.jl generated sites
        + *
        + * Heavily inspired by the Julia Sphinx theme
        + *     https://github.com/JuliaLang/JuliaDoc
        + * which extends the sphinx_rtd_theme
        + *     https://github.com/snide/sphinx_rtd_theme
        + *
        + * Part of Documenter.jl
        + *     https://github.com/JuliaDocs/Documenter.jl
        + *
        + * License: MIT
        + */
        +
        +/* The original CSS is modified such that it right-justifies the text. */
        +
        +/* fonts */
        +body, input {
        +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
        +  font-size: 16px;
        +  color: #222;
        +  text-rendering: optimizeLegibility;
        +}
        +
        +pre, code, kbd {
        +  font-family: 'Roboto Mono', Monaco, courier, monospace;
        +  font-size: 0.90em;
        +}
        +
        +pre code {
        +  font-size: 1em;
        +}
        +
        +a {
        +    color: #2980b9;
        +    text-decoration: none;
        +}
        +
        +a:hover {
        +    color: #3091d1;
        +}
        +
        +a:visited {
        +    color: #9b59b6;
        +}
        +
        +body {
        +    line-height: 1.5;
        +}
        +
        +h1 {
        +    font-size: 1.75em;
        +}
        +
        +/* Unless the 

        the is very first thing on the page (i.e. the second element + * in the
        , * after the
        , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
         surrounding the , while
        + * highlight.js applies the .hljs style directly to the  tag.
        + */
        +.hljs {
        +    background-color: transparent;
        +    padding: 0;
        +}
        +
        +@media only screen and (max-width: 768px) {
        +    nav.toc {
        +        position: fixed;
        +        overflow-y: scroll;
        +        width: 16em;
        +        left: -16em;
        +        -webkit-overflow-scrolling: touch;
        +        -webkit-transition-property: left; /* Safari */
        +        -webkit-transition-duration: 0.3s; /* Safari */
        +        transition-property: left;
        +        transition-duration: 0.3s;
        +        -webkit-transition-timing-function: ease-out; /* Safari */
        +        transition-timing-function: ease-out;
        +        z-index: 2;
        +    }
        +
        +    nav.toc.show {
        +        left: 0;
        +    }
        +
        +    article {
        +        margin-left: 0;
        +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
        +        overflow-wrap: break-word;
        +    }
        +
        +    article > header {
        +        position: fixed;
        +        left: 0;
        +        z-index: 1;
        +    }
        +
        +    article > header nav, hr {
        +        display: none;
        +    }
        +
        +    article > header div#topbar {
        +        display: block; /* is mobile */
        +        position: fixed;
        +        width: 100%;
        +        height: 1.5em;
        +        padding-top: 1em;
        +        padding-bottom: 1em;
        +        background-color: #fcfcfc;
        +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
        +        top: 0;
        +        -webkit-transition-property: top; /* Safari */
        +        -webkit-transition-duration: 0.3s; /* Safari */
        +        transition-property: top;
        +        transition-duration: 0.3s;
        +    }
        +
        +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
        +        top: -4em;
        +        -webkit-transition-property: top; /* Safari */
        +        -webkit-transition-duration: 0.7s; /* Safari */
        +        transition-property: top;
        +        transition-duration: 0.7s;
        +    }
        +
        +    article > header div#topbar span {
        +        position: fixed;
        +        width: 80%;
        +        height: 1.5em;
        +        margin-top: -0.1em;
        +        margin-left: 0.9em;
        +        font-size: 1.2em;
        +        overflow: hidden;
        +    }
        +
        +    article > header div#topbar a.fa-bars {
        +        float: right;
        +        padding: 0.6em;
        +        margin-top: -0.6em;
        +        margin-right: 0.3em;
        +        font-size: 1.5em;
        +    }
        +
        +    article > header div#topbar a.fa-bars:visited {
        +        color: #3091d1;
        +    }
        +
        +    article table {
        +        overflow-x: auto;
        +        display: block;
        +    }
        +
        +    article div.MathJax_Display {
        +        overflow: scroll;
        +    }
        +
        +    article span.MathJax {
        +        overflow: hidden;
        +    }
        +}
        +
        +@media only screen and (max-width: 320px) {
        +    body {
        +        font-size: 15px;
        +    }
        +}
        diff --git a/release-0.3/assets/search.js b/release-0.3/assets/search.js
        new file mode 100644
        index 00000000..f99b3786
        --- /dev/null
        +++ b/release-0.3/assets/search.js
        @@ -0,0 +1,250 @@
        +/*
        + * Part of Documenter.jl
        + *     https://github.com/JuliaDocs/Documenter.jl
        + *
        + * License: MIT
        + */
        +
        +// parseUri 1.2.2
        +// (c) Steven Levithan 
        +// MIT License
        +function parseUri (str) {
        +	var	o   = parseUri.options,
        +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
        +		uri = {},
        +		i   = 14;
        +
        +	while (i--) uri[o.key[i]] = m[i] || "";
        +
        +	uri[o.q.name] = {};
        +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
        +		if ($1) uri[o.q.name][$1] = $2;
        +	});
        +
        +	return uri;
        +};
        +parseUri.options = {
        +	strictMode: false,
        +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
        +	q:   {
        +		name:   "queryKey",
        +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
        +	},
        +	parser: {
        +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
        +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
        +	}
        +};
        +
        +requirejs.config({
        +    paths: {
        +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
        +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.1/lunr.min',
        +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
        +    }
        +});
        +
        +var currentScript = document.currentScript;
        +
        +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
        +    $("#search-form").submit(function(e) {
        +        e.preventDefault()
        +    })
        +
        +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
        +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
        +    // ideally we'd just filter the original list but it's not available as a variable
        +    lunr.stopWordFilter = lunr.generateStopWordFilter([
        +        'a',
        +        'able',
        +        'about',
        +        'across',
        +        'after',
        +        'almost',
        +        'also',
        +        'am',
        +        'among',
        +        'an',
        +        'and',
        +        'are',
        +        'as',
        +        'at',
        +        'be',
        +        'because',
        +        'been',
        +        'but',
        +        'by',
        +        'can',
        +        'cannot',
        +        'could',
        +        'dear',
        +        'did',
        +        'does',
        +        'either',
        +        'ever',
        +        'every',
        +        'from',
        +        'got',
        +        'had',
        +        'has',
        +        'have',
        +        'he',
        +        'her',
        +        'hers',
        +        'him',
        +        'his',
        +        'how',
        +        'however',
        +        'i',
        +        'if',
        +        'into',
        +        'it',
        +        'its',
        +        'just',
        +        'least',
        +        'like',
        +        'likely',
        +        'may',
        +        'me',
        +        'might',
        +        'most',
        +        'must',
        +        'my',
        +        'neither',
        +        'no',
        +        'nor',
        +        'not',
        +        'of',
        +        'off',
        +        'often',
        +        'on',
        +        'only',
        +        'or',
        +        'other',
        +        'our',
        +        'own',
        +        'rather',
        +        'said',
        +        'say',
        +        'says',
        +        'she',
        +        'should',
        +        'since',
        +        'so',
        +        'some',
        +        'than',
        +        'that',
        +        'the',
        +        'their',
        +        'them',
        +        'then',
        +        'there',
        +        'these',
        +        'they',
        +        'this',
        +        'tis',
        +        'to',
        +        'too',
        +        'twas',
        +        'us',
        +        'wants',
        +        'was',
        +        'we',
        +        'were',
        +        'what',
        +        'when',
        +        'who',
        +        'whom',
        +        'why',
        +        'will',
        +        'would',
        +        'yet',
        +        'you',
        +        'your'
        +        ])
        +
        +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
        +    // would not find anything if searching for "add!", only for the entire qualification
        +    lunr.tokenizer.separator = /[\s\-\.]+/
        +
        +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
        +    lunr.trimmer = function (token) {
        +        return token.update(function (s) {
        +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
        +        })
        +    }
        +
        +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
        +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
        +
        +    var index = lunr(function () {
        +        this.ref('location')
        +        this.field('title')
        +        this.field('text')
        +        documenterSearchIndex['docs'].forEach(function(e) {
        +            this.add(e)
        +        }, this)
        +    })
        +    var store = {}
        +
        +    documenterSearchIndex['docs'].forEach(function(e) {
        +        store[e.location] = {title: e.title, category: e.category}
        +    })
        +
        +    $(function(){
        +        function update_search(querystring) {
        +            tokens = lunr.tokenizer(querystring)
        +            results = index.query(function (q) {
        +                tokens.forEach(function (t) {
        +                    q.term(t.toString(), {
        +                        fields: ["title"],
        +                        boost: 100,
        +                        usePipeline: false,
        +                        editDistance: 0,
        +                        wildcard: lunr.Query.wildcard.NONE
        +                    })
        +                    q.term(t.toString(), {
        +                        fields: ["title"],
        +                        boost: 10,
        +                        usePipeline: false,
        +                        editDistance: 2,
        +                        wildcard: lunr.Query.wildcard.NONE
        +                    })
        +                    q.term(t.toString(), {
        +                        fields: ["text"],
        +                        boost: 1,
        +                        usePipeline: true,
        +                        editDistance: 0,
        +                        wildcard: lunr.Query.wildcard.NONE
        +                    })
        +                })
        +            })
        +            $('#search-info').text("Number of results: " + results.length)
        +            $('#search-results').empty()
        +            results.forEach(function(result) {
        +                data = store[result.ref]
        +                link = $('')
        +                link.text(data.title)
        +                link.attr('href', documenterBaseURL+'/'+result.ref)
        +                cat = $('('+data.category+')')
        +                li = $('
      • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/release-0.3/index.html b/release-0.3/index.html new file mode 100644 index 00000000..a76af2f8 --- /dev/null +++ b/release-0.3/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

        Home

        MathematicalSystems.jl

        MathematicalSystems is a Julia package for mathematical systems interfaces.

        Features

        • Generic and flexible systems definitions, while being fast and type stable.
        • Types for mathematical systems modeling: continuous, discrete, controlled,

        linear algebraic, etc.

        • Iterator interfaces to handle constant or time-varying inputs.

        Library Outline

        diff --git a/release-0.3/lib/methods.html b/release-0.3/lib/methods.html new file mode 100644 index 00000000..724e89c4 --- /dev/null +++ b/release-0.3/lib/methods.html @@ -0,0 +1,2 @@ + +Methods · MathematicalSystems.jl

        Methods

        Methods

        This section describes systems methods implemented in MathematicalSystems.jl.

        States

        statedim(s::AbstractSystem)

        Returns the dimension of the state space of system s.

        source
        stateset(s::AbstractSystem)

        Returns the set of allowed states of system s.

        source

        Inputs

        inputdim(s::AbstractSystem)

        Returns the dimension of the input space of system s.

        source
        inputset(s::AbstractSystem)

        Returns the set of allowed inputs of system s.

        source
        nextinput(input::ConstantInput, n::Int=1)

        Returns the first n elements of this input.

        Input

        • input – a constant input
        • n – (optional, default: 1) the number of desired elements

        Output

        A repeated iterator that generates n equal samples of this input.

        source
        nextinput(input::VaryingInput, n::Int=1)

        Returns the first n elements of this input.

        Input

        • input – varying input
        • n – (optional, default: 1) number of desired elements

        Output

        An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

        source

        Output

        outputdim(m::AbstractMap)

        Returns the dimension of the output space of the map m.

        source
        outputmap(s::SystemWithOutput)

        Returns the output map of a system with output.

        source
        diff --git a/release-0.3/lib/types.html b/release-0.3/lib/types.html new file mode 100644 index 00000000..023a6b7e --- /dev/null +++ b/release-0.3/lib/types.html @@ -0,0 +1,64 @@ + +Types · MathematicalSystems.jl

        Types

        Types

        This section describes systems types implemented in MathematicalSystems.jl.

        Abstract Systems

        AbstractSystem

        Abstract supertype for all system types.

        source
        AbstractContinuousSystem

        Abstract supertype for all continuous system types.

        source
        AbstractDiscreteSystem

        Abstract supertype for all discrete system types.

        source

        Continuous Systems

        ContinuousIdentitySystem <: AbstractContinuousSystem

        Trivial identity continuous-time system of the form

        \[x' = 0.\]
        source
        ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

        Trivial identity continuous-time system with state constraints of the form

        \[x' = 0, x(t) ∈ \mathcal{X}.\]
        source
        LinearContinuousSystem

        Continuous-time linear system of the form

        \[x' = A x.\]

        Fields

        • A – square matrix
        source
        AffineContinuousSystem

        Continuous-time affine system of the form

        \[x' = A x + b.\]

        Fields

        • A – square matrix
        • b – vector
        source
        LinearControlContinuousSystem

        Continuous-time linear control system of the form

        \[x' = A x + B u.\]

        Fields

        • A – square matrix
        • B – matrix
        source
        ConstrainedLinearContinuousSystem

        Continuous-time linear system with state constraints of the form

        \[x' = A x, x(t) ∈ \mathcal{X}.\]

        Fields

        • A – square matrix
        • X – state constraints
        source
        ConstrainedAffineContinuousSystem

        Continuous-time affine system with state constraints of the form

        \[x' = A x + b, x(t) ∈ \mathcal{X}.\]

        Fields

        • A – square matrix
        • b – vector
        • X – state constraints
        source
        ConstrainedAffineControlContinuousSystem

        Continuous-time affine control system with state constraints of the form

        \[x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

        and $c$ a vector.

        Fields

        • A – square matrix
        • B – matrix
        • c – vector
        • X – state constraints
        • U – input constraints
        source
        ConstrainedLinearControlContinuousSystem

        Continuous-time linear control system with state constraints of the form

        \[x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

        Fields

        • A – square matrix
        • B – matrix
        • X – state constraints
        • U – input constraints
        source
        LinearAlgebraicContinuousSystem

        Continuous-time linear algebraic system of the form

        \[E x' = A x.\]

        Fields

        • A – matrix
        • E – matrix, same size as A
        source
        ConstrainedLinearAlgebraicContinuousSystem

        Continuous-time linear system with state constraints of the form

        \[E x' = A x, x(t) ∈ \mathcal{X}.\]

        Fields

        • A – matrix
        • E – matrix, same size as A
        • X – state constraints
        source
        PolynomialContinuousSystem

        Continuous-time polynomial system of the form

        \[x' = p(x).\]

        Fields

        • p – polynomial
        • statedim – number of state variables
        source
        ConstrainedPolynomialContinuousSystem

        Continuous-time polynomial system with state constraints,

        \[x' = p(x), x(t) ∈ \mathcal{X}\]

        Fields

        • p – polynomial
        • X – constraint set
        • statedim – number of state variables
        source

        Discrete Systems

        DiscreteIdentitySystem <: AbstractDiscreteSystem

        Trivial identity discrete-time system of the form

        \[x_{k+1} = x_k.\]
        source
        ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

        Trivial identity discrete-time system with state constraints of the form

        \[x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]
        source
        LinearDiscreteSystem

        Discrete-time linear system of the form

        \[x_{k+1} = A x_k.\]

        Fields

        • A – square matrix
        source
        LinearControlDiscreteSystem

        Discrete-time linear control system of the form

        \[x_{k+1} = A x_k + B u_k.\]

        Fields

        • A – square matrix
        • B – matrix
        source
        ConstrainedLinearDiscreteSystem

        Discrete-time linear system with state constraints of the form

        \[x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

        Fields

        • A – square matrix
        • X – state constraints
        source
        ConstrainedLinearControlDiscreteSystem

        Discrete-time linear control system with state constraints of the form

        \[x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

        Fields

        • A – square matrix
        • B – matrix
        • X – state constraints
        • U – input constraints
        source
        LinearAlgebraicDiscreteSystem

        Discrete-time linear algebraic system of the form

        \[E x_{k+1} = A x_k.\]

        Fields

        • A – matrix
        • E – matrix, same size as A
        source
        ConstrainedLinearAlgebraicDiscreteSystem

        Discrete-time linear system with state constraints of the form

        \[E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

        Fields

        • A – matrix
        • E – matrix, same size as A
        • X – state constraints
        source
        PolynomialDiscreteSystem

        Discrete-time polynomial system of the form

        \[x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

        Fields

        • p – polynomial
        • statedim – number of state variables
        source
        ConstrainedPolynomialDiscreteSystem

        Discrete-time polynomial system with state constraints,

        \[x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

        Fields

        • p – polynomial
        • X – constraint set
        • statedim – number of state variables
        source

        Initial Value Problems

        InitialValueProblem

        Parametric composite type for initial value problems. It is parameterized in the system's type.

        Fields

        • s – system
        • x0 – initial state

        Examples

        The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

        julia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);
        +
        +julia> p.x0
        +2-element Array{Float64,1}:
        + -0.5
        +  0.5
        +
        +julia> statedim(p)
        +2
        +
        +julia> inputdim(p)
        +0
        source
        IVP

        IVP is an alias for InitialValueProblem.

        source

        Input Types

        AbstractInput

        Abstract supertype for all input types.

        Notes

        The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

        Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

        A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

        source
        ConstantInput{UT} <: AbstractInput

        Type representing an input that remains constant in time.

        Fields

        • U – input set

        Examples

        The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

        julia> c = ConstantInput(-1//2)
        +ConstantInput{Rational{Int64}}(-1//2)
        +
        +julia> iterate(c, 1)
        +(-1//2, nothing)
        +
        +julia> iterate(c, 2)
        +(-1//2, nothing)
        +
        +julia> collect(nextinput(c, 4))
        +4-element Array{Rational{Int64},1}:
        + -1//2
        + -1//2
        + -1//2
        + -1//2

        The elements of this input are rational numbers:

        julia> eltype(c)
        +Rational{Int64}

        To transform a constant input, you can use map as in:

        julia> map(x->2*x, c)
        +ConstantInput{Rational{Int64}}(-1//1)
        source
        VaryingInput{UT} <: AbstractInput

        Type representing an input that may vary with time.

        Fields

        • U – vector of input sets

        Examples

        The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

        julia> v = VaryingInput([-1//2, 1//2])
        +VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])
        +
        +julia> length(v)
        +2
        +
        +julia> eltype(v)
        +Rational{Int64}

        Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

        julia> iterate(v, 1)
        +(-1//2, 2)
        +
        +julia> iterate(v, 2)
        +(1//2, 3)

        The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

        julia> typeof(nextinput(v))
        +Base.Iterators.Take{VaryingInput{Rational{Int64}}}
        +
        +julia> collect(nextinput(v, 1))
        +1-element Array{Rational{Int64},1}:
        + -1//2
        +
        +julia> collect(nextinput(v, 2))
        +2-element Array{Rational{Int64},1}:
        + -1//2
        +  1//2

        You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

        julia> collect(v)
        +2-element Array{Rational{Int64},1}:
        + -1//2
        +  1//2
        +
        +julia> [2*vi for vi in v]
        +2-element Array{Rational{Int64},1}:
        + -1//1
        +  1//1

        Since this input type is finite, querying more elements than its length returns the full vector:

        julia> collect(nextinput(v, 4))
        +2-element Array{Rational{Int64},1}:
        + -1//2
        +  1//2

        To transform a varying input, you can use map as in:

        julia> map(x->2*x, v)
        +VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])
        source

        Maps

        AbstractMap

        Abstract supertype for all map types.

        source
        LinearMap

        A linear map

        \[x ↦ Ax\]

        Fields

        • A – matrix
        source
        AffineMap

        An affine map

        \[x ↦ Ax + b\]

        Fields

        • A – matrix
        • b – vector
        source
        LinearControlMap

        A linear control map

        \[x ↦ Ax + Bu.\]

        Fields

        • A – matrix
        • B – matrix
        source
        ConstrainedLinearControlMap

        A linear control map with input constraints,

        \[x ↦ Ax + Bu, u ∈ \mathcal{U}.\]

        Fields

        • A – matrix
        • B – matrix
        • U – input constraints
        source
        AffineControlMap

        An affine control map

        \[x ↦ Ax + Bu + c.\]

        Fields

        • A – matrix
        • B – matrix
        • c – vector
        source
        ConstrainedAffineControlMap

        An affine control map with input constraints,

        \[x ↦ Ax + Bu + c, u ∈ \mathcal{U}.\]

        Fields

        • A – matrix
        • B – matrix
        • c – vector
        • U – input constraints
        source

        Systems with output

        SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

        Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

        Fields

        • s – system of type ST
        • outputmap – output map of type MT
        source
        LinearTimeInvariantSystem(A, B, C, D)

        A linear time-invariant system with of the form

        \[x' = Ax + Bu,\ +y = Cx + Du.\]

        Input

        • A – matrix
        • B – matrix
        • C – matrix
        • D – matrix

        Output

        A system with output such that the system is a linear control continuous system and the output map is a linear control map.

        source
        LinearTimeInvariantSystem(A, B, C, D, X, U)

        A linear time-invariant system with state and input constraints of the form

        \[x' = Ax + Bu,\ +y = Cx + Du,\]

        where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

        Input

        • A – matrix
        • B – matrix
        • C – matrix
        • D – matrix
        • X – state constraints
        • U – input constraints

        Output

        A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

        source
        LTISystem

        LTISystem is an alias for LinearTimeInvariantSystem.

        source
        diff --git a/release-0.3/search.html b/release-0.3/search.html new file mode 100644 index 00000000..c2092db7 --- /dev/null +++ b/release-0.3/search.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

        Search

        Search

        Number of results: loading...

          diff --git a/release-0.3/search_index.js b/release-0.3/search_index.js new file mode 100644 index 00000000..cfc32ec3 --- /dev/null +++ b/release-0.3/search_index.js @@ -0,0 +1,595 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "index.html#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "index.html#MathematicalSystems.jl-1", + "page": "Home", + "title": "MathematicalSystems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]MathematicalSystems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "index.html#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled,linear algebraic, etc.Iterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "index.html#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types.html#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types.html#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in MathematicalSystems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form\n\nx = 0\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form\n\nx = 0 x(t) mathcalX\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form\n\nx = A x\n\nFields\n\nA – square matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AffineContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AffineContinuousSystem", + "category": "type", + "text": "AffineContinuousSystem\n\nContinuous-time affine system of the form\n\nx = A x + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form\n\nx = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nx = A x x(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedAffineContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineContinuousSystem", + "category": "type", + "text": "ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form\n\nx = A x + b x(t) mathcalX\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedAffineControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlContinuousSystem", + "category": "type", + "text": "ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form\n\nx = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form\n\nx = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form\n\nE x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nE x = A x x(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.PolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialContinuousSystem", + "category": "type", + "text": "PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form\n\nx = p(x)\n\nFields\n\np – polynomial\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "category": "type", + "text": "ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints,\n\nx = p(x) x(t) mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.DiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form\n\nx_k+1 = x_k\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form\n\nx_k+1 = x_k x_k mathcalX\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form\n\nx_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form\n\nx_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nx_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form\n\nx_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form\n\nE x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nE x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.PolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialDiscreteSystem", + "category": "type", + "text": "PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form\n\nx_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "category": "type", + "text": "ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints,\n\nx_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.InitialValueProblem", + "page": "Types", + "title": "MathematicalSystems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.IVP", + "page": "Types", + "title": "MathematicalSystems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractInput", + "page": "Types", + "title": "MathematicalSystems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstantInput", + "page": "Types", + "title": "MathematicalSystems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.VaryingInput", + "page": "Types", + "title": "MathematicalSystems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractMap", + "page": "Types", + "title": "MathematicalSystems.AbstractMap", + "category": "type", + "text": "AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearMap", + "page": "Types", + "title": "MathematicalSystems.LinearMap", + "category": "type", + "text": "LinearMap\n\nA linear map\n\nx Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AffineMap", + "page": "Types", + "title": "MathematicalSystems.AffineMap", + "category": "type", + "text": "AffineMap\n\nAn affine map\n\nx Ax + b\n\nFields\n\nA – matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlMap", + "page": "Types", + "title": "MathematicalSystems.LinearControlMap", + "category": "type", + "text": "LinearControlMap\n\nA linear control map\n\nx Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlMap", + "category": "type", + "text": "ConstrainedLinearControlMap\n\nA linear control map with input constraints,\n\nx Ax + Bu u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AffineControlMap", + "page": "Types", + "title": "MathematicalSystems.AffineControlMap", + "category": "type", + "text": "AffineControlMap\n\nAn affine control map\n\nx Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedAffineControlMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlMap", + "category": "type", + "text": "ConstrainedAffineControlMap\n\nAn affine control map with input constraints,\n\nx Ax + Bu + c u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Maps-1", + "page": "Types", + "title": "Maps", + "category": "section", + "text": "AbstractMap\nLinearMap\nAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap" +}, + +{ + "location": "lib/types.html#MathematicalSystems.SystemWithOutput", + "page": "Types", + "title": "MathematicalSystems.SystemWithOutput", + "category": "type", + "text": "SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system\'s type (ST) and in the map\'s type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearTimeInvariantSystem", + "page": "Types", + "title": "MathematicalSystems.LinearTimeInvariantSystem", + "category": "function", + "text": "LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LTISystem", + "page": "Types", + "title": "MathematicalSystems.LTISystem", + "category": "function", + "text": "LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems-with-output-1", + "page": "Types", + "title": "Systems with output", + "category": "section", + "text": "SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem" +}, + +{ + "location": "lib/methods.html#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods.html#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in MathematicalSystems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.statedim", + "page": "Methods", + "title": "MathematicalSystems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.stateset", + "page": "Methods", + "title": "MathematicalSystems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputdim", + "page": "Methods", + "title": "MathematicalSystems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputset", + "page": "Methods", + "title": "MathematicalSystems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.nextinput", + "page": "Methods", + "title": "MathematicalSystems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.outputdim", + "page": "Methods", + "title": "MathematicalSystems.outputdim", + "category": "function", + "text": "outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.outputmap", + "page": "Methods", + "title": "MathematicalSystems.outputmap", + "category": "function", + "text": "outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Output-1", + "page": "Methods", + "title": "Output", + "category": "section", + "text": "outputdim\noutputmap" +}, + +{ + "location": "about.html#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about.html#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about.html#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about.html#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about.html#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"MathematicalSystems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about.html#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about.html#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about.html#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to MathematicalSystems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/release-0.3/siteinfo.js b/release-0.3/siteinfo.js new file mode 100644 index 00000000..b331d985 --- /dev/null +++ b/release-0.3/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "release-0.3"; diff --git a/stable b/stable new file mode 120000 index 00000000..8ba78f8a --- /dev/null +++ b/stable @@ -0,0 +1 @@ +v0.11.9 \ No newline at end of file diff --git a/v0.1 b/v0.1 new file mode 120000 index 00000000..f4caccce --- /dev/null +++ b/v0.1 @@ -0,0 +1 @@ +v0.1.2 \ No newline at end of file diff --git a/v0.1.0/about.html b/v0.1.0/about.html new file mode 100644 index 00000000..369484a7 --- /dev/null +++ b/v0.1.0/about.html @@ -0,0 +1,2 @@ + +About · Systems.jl

          About

          About

          This page contains some general information about this project, and recommendations about contributing.

          Contributing

          If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

          Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

          Branches and pull requests (PR)

          We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

          Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

          Unit testing and continuous integration (CI)

          This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

          When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

          $ julia --color=yes test/runtests.jl

          Alternatively, you can achieve the same from inside the REPL using the following command:

          julia> Pkg.test("Systems")

          We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

          Contributing to the documentation

          New functions and types should be documented according to our guidelines directly in the source code.

          You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

          julia> ?LinearContinuousSystem

          This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

          To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

          $ julia --color=yes docs/make.jl

          Note that this also runs all doctests which will take some time.

          Related projects

          This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

          Below we list more related projects.

          Package nameDescription
          HybridSystems.jlHybrid Systems definitions in Julia.
          LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
          ControlToolbox.jlAnalysis and design tools for control systems.
          ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
          DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
          ControlSystems.jlA Control Systems Toolbox for Julia

          Credits

          These persons have contributed to Systems.jl (in alphabetic order):

          diff --git a/v0.1.0/assets/arrow.svg b/v0.1.0/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.1.0/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.1.0/assets/documenter.css b/v0.1.0/assets/documenter.css new file mode 100644 index 00000000..dc1b4cf5 --- /dev/null +++ b/v0.1.0/assets/documenter.css @@ -0,0 +1,577 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

          the is very first thing on the page (i.e. the second element + * in the
          , * after the
          , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
           surrounding the , while
          + * highlight.js applies the .hljs style directly to the  tag.
          + */
          +.hljs {
          +    background-color: transparent;
          +    padding: 0;
          +}
          +
          +@media only screen and (max-width: 768px) {
          +    nav.toc {
          +        position: fixed;
          +        overflow-y: scroll;
          +        width: 16em;
          +        left: -16em;
          +        -webkit-overflow-scrolling: touch;
          +        -webkit-transition-property: left; /* Safari */
          +        -webkit-transition-duration: 0.3s; /* Safari */
          +        transition-property: left;
          +        transition-duration: 0.3s;
          +        -webkit-transition-timing-function: ease-out; /* Safari */
          +        transition-timing-function: ease-out;
          +        z-index: 2;
          +    }
          +
          +    nav.toc.show {
          +        left: 0;
          +    }
          +
          +    article {
          +        margin-left: 0;
          +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
          +        overflow-wrap: break-word;
          +    }
          +
          +    article > header {
          +        position: fixed;
          +        left: 0;
          +        z-index: 1;
          +    }
          +
          +    article > header nav, hr {
          +        display: none;
          +    }
          +
          +    article > header div#topbar {
          +        display: block; /* is mobile */
          +        position: fixed;
          +        width: 100%;
          +        height: 1.5em;
          +        padding-top: 1em;
          +        padding-bottom: 1em;
          +        background-color: #fcfcfc;
          +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
          +        top: 0;
          +        -webkit-transition-property: top; /* Safari */
          +        -webkit-transition-duration: 0.3s; /* Safari */
          +        transition-property: top;
          +        transition-duration: 0.3s;
          +    }
          +
          +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
          +        top: -4em;
          +        -webkit-transition-property: top; /* Safari */
          +        -webkit-transition-duration: 0.7s; /* Safari */
          +        transition-property: top;
          +        transition-duration: 0.7s;
          +    }
          +
          +    article > header div#topbar span {
          +        position: fixed;
          +        width: 80%;
          +        height: 1.5em;
          +        margin-top: -0.1em;
          +        margin-left: 0.9em;
          +        font-size: 1.2em;
          +        overflow: hidden;
          +    }
          +
          +    article > header div#topbar a.fa-bars {
          +        float: right;
          +        padding: 0.6em;
          +        margin-top: -0.6em;
          +        margin-right: 0.3em;
          +        font-size: 1.5em;
          +    }
          +
          +    article > header div#topbar a.fa-bars:visited {
          +        color: #3091d1;
          +    }
          +
          +    article table {
          +        overflow-x: auto;
          +        display: block;
          +    }
          +
          +    article div.MathJax_Display {
          +        overflow: scroll;
          +    }
          +
          +    article span.MathJax {
          +        overflow: hidden;
          +    }
          +}
          +
          +@media only screen and (max-width: 320px) {
          +    body {
          +        font-size: 15px;
          +    }
          +}
          diff --git a/v0.1.0/assets/documenter.js b/v0.1.0/assets/documenter.js
          new file mode 100644
          index 00000000..5d31622f
          --- /dev/null
          +++ b/v0.1.0/assets/documenter.js
          @@ -0,0 +1,129 @@
          +/*
          + * Part of Documenter.jl
          + *     https://github.com/JuliaDocs/Documenter.jl
          + *
          + * License: MIT
          + */
          +
          +requirejs.config({
          +    paths: {
          +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
          +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
          +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
          +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
          +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
          +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
          +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
          +    },
          +    shim: {
          +        'mathjax' : {
          +            exports: "MathJax"
          +        },
          +        'highlight-julia': ['highlight'],
          +        'highlight-julia-repl': ['highlight'],
          +    }
          +});
          +
          +// Load MathJax
          +require(['mathjax'], function(MathJax) {
          +    MathJax.Hub.Config({
          +      "tex2jax": {
          +        inlineMath: [['$','$'], ['\\(','\\)']],
          +        processEscapes: true
          +      }
          +    });
          +    MathJax.Hub.Config({
          +      config: ["MMLorHTML.js"],
          +      jax: [
          +        "input/TeX",
          +        "output/HTML-CSS",
          +        "output/NativeMML"
          +      ],
          +      extensions: [
          +        "MathMenu.js",
          +        "MathZoom.js",
          +        "TeX/AMSmath.js",
          +        "TeX/AMSsymbols.js",
          +        "TeX/autobold.js",
          +        "TeX/autoload-all.js"
          +      ]
          +    });
          +    MathJax.Hub.Config({
          +      TeX: { equationNumbers: { autoNumber: "AMS" } }
          +    });
          +})
          +
          +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
          +    $(document).ready(function() {
          +        hljs.initHighlighting();
          +    })
          +
          +})
          +
          +// update the version selector with info from the siteinfo.js and ../versions.js files
          +require(['jquery'], function($) {
          +    $(document).ready(function() {
          +        var version_selector = $("#version-selector");
          +
          +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
          +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
          +            var option = $("");
          +            version_selector.append(option);
          +        }
          +
          +        if (typeof DOC_VERSIONS !== 'undefined') {
          +            var existing_versions = $('#version-selector > option');
          +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
          +            DOC_VERSIONS.forEach(function(each) {
          +                var version_url = documenterBaseURL + "/../" + each;
          +                var existing_id = $.inArray(each, existing_versions_texts);
          +                // if not already in the version selector, add it as a new option,
          +                // otherwise update the old option with the URL and enable it
          +                if (existing_id == -1) {
          +                    var option = $("");
          +                    version_selector.append(option);
          +                } else {
          +                    var option = existing_versions[existing_id];
          +                    option.value = version_url;
          +                    option.disabled = false;
          +                }
          +            });
          +        }
          +
          +        // only show the version selector if the selector has been populated
          +        if ($('#version-selector > option').length > 0) {
          +            version_selector.css("visibility", "visible");
          +        }
          +    })
          +
          +})
          +
          +// mobile
          +require(['jquery', 'headroom'], function($, Headroom) {
          +    $(document).ready(function() {
          +        var navtoc = $("nav.toc");
          +        $("nav.toc li.current a.toctext").click(function() {
          +            navtoc.toggleClass('show');
          +        });
          +        $("article > header div#topbar a.fa-bars").click(function(ev) {
          +            ev.preventDefault();
          +            navtoc.toggleClass('show');
          +            if (navtoc.hasClass('show')) {
          +                var title = $("article > header div#topbar span").text();
          +                $("nav.toc ul li a:contains('" + title + "')").focus();
          +            }
          +        });
          +        $("article#docs").bind('click', function(ev) {
          +            if ($(ev.target).is('div#topbar a.fa-bars')) {
          +                return;
          +            }
          +            if (navtoc.hasClass('show')) {
          +                navtoc.removeClass('show');
          +            }
          +        });
          +        if ($("article > header div#topbar").css('display') == 'block') {
          +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
          +            headroom.init();
          +        }
          +    })
          +})
          diff --git a/v0.1.0/assets/juliareach.css b/v0.1.0/assets/juliareach.css
          new file mode 100644
          index 00000000..64b0d92d
          --- /dev/null
          +++ b/v0.1.0/assets/juliareach.css
          @@ -0,0 +1,583 @@
          +/*
          + * The default CSS style for Documenter.jl generated sites
          + *
          + * Heavily inspired by the Julia Sphinx theme
          + *     https://github.com/JuliaLang/JuliaDoc
          + * which extends the sphinx_rtd_theme
          + *     https://github.com/snide/sphinx_rtd_theme
          + *
          + * Part of Documenter.jl
          + *     https://github.com/JuliaDocs/Documenter.jl
          + *
          + * License: MIT
          + */
          +
          +/* The original CSS is modified such that it right-justifies the text. */
          +
          +/* fonts */
          +body, input {
          +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
          +  font-size: 16px;
          +  color: #222;
          +  text-rendering: optimizeLegibility;
          +}
          +
          +pre, code, kbd {
          +  font-family: 'Roboto Mono', Monaco, courier, monospace;
          +  font-size: 0.90em;
          +}
          +
          +pre code {
          +  font-size: 1em;
          +}
          +
          +a {
          +    color: #2980b9;
          +    text-decoration: none;
          +}
          +
          +a:hover {
          +    color: #3091d1;
          +}
          +
          +a:visited {
          +    color: #9b59b6;
          +}
          +
          +body {
          +    line-height: 1.5;
          +}
          +
          +h1 {
          +    font-size: 1.75em;
          +}
          +
          +/* Unless the 

          the is very first thing on the page (i.e. the second element + * in the
          , * after the
          , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
           surrounding the , while
          + * highlight.js applies the .hljs style directly to the  tag.
          + */
          +.hljs {
          +    background-color: transparent;
          +    padding: 0;
          +}
          +
          +@media only screen and (max-width: 768px) {
          +    nav.toc {
          +        position: fixed;
          +        overflow-y: scroll;
          +        width: 16em;
          +        left: -16em;
          +        -webkit-overflow-scrolling: touch;
          +        -webkit-transition-property: left; /* Safari */
          +        -webkit-transition-duration: 0.3s; /* Safari */
          +        transition-property: left;
          +        transition-duration: 0.3s;
          +        -webkit-transition-timing-function: ease-out; /* Safari */
          +        transition-timing-function: ease-out;
          +        z-index: 2;
          +    }
          +
          +    nav.toc.show {
          +        left: 0;
          +    }
          +
          +    article {
          +        margin-left: 0;
          +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
          +        overflow-wrap: break-word;
          +    }
          +
          +    article > header {
          +        position: fixed;
          +        left: 0;
          +        z-index: 1;
          +    }
          +
          +    article > header nav, hr {
          +        display: none;
          +    }
          +
          +    article > header div#topbar {
          +        display: block; /* is mobile */
          +        position: fixed;
          +        width: 100%;
          +        height: 1.5em;
          +        padding-top: 1em;
          +        padding-bottom: 1em;
          +        background-color: #fcfcfc;
          +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
          +        top: 0;
          +        -webkit-transition-property: top; /* Safari */
          +        -webkit-transition-duration: 0.3s; /* Safari */
          +        transition-property: top;
          +        transition-duration: 0.3s;
          +    }
          +
          +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
          +        top: -4em;
          +        -webkit-transition-property: top; /* Safari */
          +        -webkit-transition-duration: 0.7s; /* Safari */
          +        transition-property: top;
          +        transition-duration: 0.7s;
          +    }
          +
          +    article > header div#topbar span {
          +        position: fixed;
          +        width: 80%;
          +        height: 1.5em;
          +        margin-top: -0.1em;
          +        margin-left: 0.9em;
          +        font-size: 1.2em;
          +        overflow: hidden;
          +    }
          +
          +    article > header div#topbar a.fa-bars {
          +        float: right;
          +        padding: 0.6em;
          +        margin-top: -0.6em;
          +        margin-right: 0.3em;
          +        font-size: 1.5em;
          +    }
          +
          +    article > header div#topbar a.fa-bars:visited {
          +        color: #3091d1;
          +    }
          +
          +    article table {
          +        overflow-x: auto;
          +        display: block;
          +    }
          +
          +    article div.MathJax_Display {
          +        overflow: scroll;
          +    }
          +
          +    article span.MathJax {
          +        overflow: hidden;
          +    }
          +}
          +
          +@media only screen and (max-width: 320px) {
          +    body {
          +        font-size: 15px;
          +    }
          +}
          diff --git a/v0.1.0/assets/search.js b/v0.1.0/assets/search.js
          new file mode 100644
          index 00000000..5eb7fee8
          --- /dev/null
          +++ b/v0.1.0/assets/search.js
          @@ -0,0 +1,243 @@
          +/*
          + * Part of Documenter.jl
          + *     https://github.com/JuliaDocs/Documenter.jl
          + *
          + * License: MIT
          + */
          +
          +// parseUri 1.2.2
          +// (c) Steven Levithan 
          +// MIT License
          +function parseUri (str) {
          +	var	o   = parseUri.options,
          +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
          +		uri = {},
          +		i   = 14;
          +
          +	while (i--) uri[o.key[i]] = m[i] || "";
          +
          +	uri[o.q.name] = {};
          +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
          +		if ($1) uri[o.q.name][$1] = $2;
          +	});
          +
          +	return uri;
          +};
          +parseUri.options = {
          +	strictMode: false,
          +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
          +	q:   {
          +		name:   "queryKey",
          +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
          +	},
          +	parser: {
          +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
          +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
          +	}
          +};
          +
          +requirejs.config({
          +    paths: {
          +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
          +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.1.3/lunr.min',
          +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
          +    }
          +});
          +
          +var currentScript = document.currentScript;
          +
          +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
          +    $("#search-form").submit(function(e) {
          +        e.preventDefault()
          +    })
          +
          +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
          +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
          +    // ideally we'd just filter the original list but it's not available as a variable
          +    lunr.stopWordFilter = lunr.generateStopWordFilter([
          +        'a',
          +        'able',
          +        'about',
          +        'across',
          +        'after',
          +        'almost',
          +        'also',
          +        'am',
          +        'among',
          +        'an',
          +        'and',
          +        'are',
          +        'as',
          +        'at',
          +        'be',
          +        'because',
          +        'been',
          +        'but',
          +        'by',
          +        'can',
          +        'cannot',
          +        'could',
          +        'dear',
          +        'did',
          +        'does',
          +        'either',
          +        'ever',
          +        'every',
          +        'from',
          +        'got',
          +        'had',
          +        'has',
          +        'have',
          +        'he',
          +        'her',
          +        'hers',
          +        'him',
          +        'his',
          +        'how',
          +        'however',
          +        'i',
          +        'if',
          +        'into',
          +        'it',
          +        'its',
          +        'just',
          +        'least',
          +        'like',
          +        'likely',
          +        'may',
          +        'me',
          +        'might',
          +        'most',
          +        'must',
          +        'my',
          +        'neither',
          +        'no',
          +        'nor',
          +        'not',
          +        'of',
          +        'off',
          +        'often',
          +        'on',
          +        'only',
          +        'or',
          +        'other',
          +        'our',
          +        'own',
          +        'rather',
          +        'said',
          +        'say',
          +        'says',
          +        'she',
          +        'should',
          +        'since',
          +        'so',
          +        'some',
          +        'than',
          +        'that',
          +        'the',
          +        'their',
          +        'them',
          +        'then',
          +        'there',
          +        'these',
          +        'they',
          +        'this',
          +        'tis',
          +        'to',
          +        'too',
          +        'twas',
          +        'us',
          +        'wants',
          +        'was',
          +        'we',
          +        'were',
          +        'what',
          +        'when',
          +        'who',
          +        'whom',
          +        'why',
          +        'will',
          +        'would',
          +        'yet',
          +        'you',
          +        'your'
          +        ])
          +
          +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
          +    // would not find anything if searching for "add!", only for the entire qualification
          +    lunr.tokenizer.separator = /[\s\-\.]+/
          +
          +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
          +    lunr.trimmer = function (token) {
          +        return token.update(function (s) {
          +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
          +        })
          +    }
          +
          +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
          +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
          +
          +    var index = lunr(function () {
          +        this.ref('location')
          +        this.field('title')
          +        this.field('text')
          +        documenterSearchIndex['docs'].forEach(function(e) {
          +            this.add(e)
          +        }, this)
          +    })
          +    var store = {}
          +
          +    documenterSearchIndex['docs'].forEach(function(e) {
          +        store[e.location] = {title: e.title, category: e.category}
          +    })
          +
          +    $(function(){
          +        function update_search(querystring) {
          +            tokens = lunr.tokenizer(querystring)
          +            results = index.query(function (q) {
          +                tokens.forEach(function (t) {
          +                    q.term(t.toString(), {
          +                        fields: ["title"],
          +                        boost: 10,
          +                        usePipeline: false,
          +                        editDistance: 2,
          +                        wildcard: lunr.Query.wildcard.NONE
          +                    })
          +                    q.term(t.toString(), {
          +                        fields: ["text"],
          +                        boost: 1,
          +                        usePipeline: true,
          +                        editDistance: 2,
          +                        wildcard: lunr.Query.wildcard.NONE
          +                    })
          +                })
          +            })
          +            $('#search-info').text("Number of results: " + results.length)
          +            $('#search-results').empty()
          +            results.forEach(function(result) {
          +                data = store[result.ref]
          +                link = $('')
          +                link.text(data.title)
          +                link.attr('href', documenterBaseURL+'/'+result.ref)
          +                cat = $('('+data.category+')')
          +                li = $('
        • ').append(link).append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.1.0/index.html b/v0.1.0/index.html new file mode 100644 index 00000000..753e3b05 --- /dev/null +++ b/v0.1.0/index.html @@ -0,0 +1,2 @@ + +Home · Systems.jl diff --git a/v0.1.0/lib/methods.html b/v0.1.0/lib/methods.html new file mode 100644 index 00000000..75fd130e --- /dev/null +++ b/v0.1.0/lib/methods.html @@ -0,0 +1,2 @@ + +Methods · Systems.jl

          Methods

          Methods

          This section describes systems methods implemented in Systems.jl.

          States

          Systems.statedimFunction.
          statedim(s::AbstractSystem)

          Returns the dimension of the state space of system s.

          source
          Systems.statesetFunction.
          stateset(s::AbstractSystem)

          Returns the set of allowed states of system s.

          source

          Inputs

          Systems.inputdimFunction.
          inputdim(s::AbstractSystem)

          Returns the dimension of the input space of system s.

          source
          Systems.inputsetFunction.
          inputset(s::AbstractSystem)

          Returns the set of allowed inputs of system s.

          source
          Systems.nextinputFunction.
          nextinput(input::ConstantInput, n::Int=1)

          Returns the first n elements of this input.

          Input

          • input – a constant input

          • n – (optional, default: 1) the number of desired elements

          Output

          A repeated iterator that generates n equal samples of this input.

          source
          nextinput(input::VaryingInput, n::Int=1)

          Returns the first n elements of this input.

          Input

          • input – varying input

          • n – (optional, default: 1) number of desired elements

          Output

          An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

          source
          diff --git a/v0.1.0/lib/types.html b/v0.1.0/lib/types.html new file mode 100644 index 00000000..43d4214f --- /dev/null +++ b/v0.1.0/lib/types.html @@ -0,0 +1,60 @@ + +Types · Systems.jl

          Types

          Types

          This section describes systems types implemented in Systems.jl.

          Abstract Systems

          AbstractSystem

          Abstract supertype for all system types.

          source
          AbstractContinuousSystem

          Abstract supertype for all continuous system types.

          source
          AbstractDiscreteSystem

          Abstract supertype for all discrete system types.

          source

          Continuous Systems

          ContinuousIdentitySystem <: AbstractContinuousSystem

          Trivial identity continuous-time system of the form

          \[x' = 0.\]
          source
          ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

          Trivial identity continuous-time system with state constraints of the form

          \[x' = 0, x(t) ∈ \mathcal{X}.\]
          source
          LinearContinuousSystem

          Continuous-time linear system of the form

          \[x' = A x.\]

          Fields

          • A – square matrix

          source
          LinearControlContinuousSystem

          Continuous-time linear control system of the form

          \[x' = A x + B u.\]

          Fields

          • A – square matrix

          • B – matrix

          source
          ConstrainedLinearContinuousSystem

          Continuous-time linear system with state constraints of the form

          \[x' = A x, x(t) ∈ \mathcal{X}.\]

          Fields

          • A – square matrix

          • X – state constraints

          source
          ConstrainedLinearControlContinuousSystem

          Continuous-time linear control system with state constraints of the form

          \[x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

          Fields

          • A – square matrix

          • B – matrix

          • X – state constraints

          • U – input constraints

          source
          LinearAlgebraicContinuousSystem

          Continuous-time linear algebraic system of the form

          \[E x' = A x.\]

          Fields

          • A – matrix

          • E – matrix, same size as A

          source
          ConstrainedLinearAlgebraicContinuousSystem

          Continuous-time linear system with state constraints of the form

          \[E x' = A x, x(t) ∈ \mathcal{X}.\]

          Fields

          • A – matrix

          • E – matrix, same size as A

          • X – state constraints

          source

          Discrete Systems

          DiscreteIdentitySystem <: AbstractDiscreteSystem

          Trivial identity discrete-time system of the form

          \[x_{k+1} = x_k.\]
          source
          ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

          Trivial identity discrete-time system with state constraints of the form

          \[x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]
          source
          LinearDiscreteSystem

          Discrete-time linear system of the form

          \[x_{k+1} = A x_k.\]

          Fields

          • A – square matrix

          source
          LinearControlDiscreteSystem

          Discrete-time linear control system of the form

          \[x_{k+1} = A x_k + B u_k.\]

          Fields

          • A – square matrix

          • B – matrix

          source
          ConstrainedLinearDiscreteSystem

          Discrete-time linear system with state constraints of the form

          \[x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

          Fields

          • A – square matrix

          • X – state constraints

          source
          ConstrainedLinearControlDiscreteSystem

          Discrete-time linear control system with state constraints of the form

          \[x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

          Fields

          • A – square matrix

          • B – matrix

          • X – state constraints

          • U – input constraints

          source
          LinearAlgebraicDiscreteSystem

          Discrete-time linear algebraic system of the form

          \[E x_{k+1} = A x_k.\]

          Fields

          • A – matrix

          • E – matrix, same size as A

          source
          ConstrainedLinearAlgebraicDiscreteSystem

          Discrete-time linear system with state constraints of the form

          \[E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

          Fields

          • A – matrix

          • E – matrix, same size as A

          • X – state constraints

          source

          Initial Value Problems

          InitialValueProblem

          Parametric composite type for initial value problems. It is parameterized in the system's type.

          Fields

          • s – system

          • x0 – initial state

          Examples

          The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

          julia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);
          +
          +julia> p.x0
          +2-element Array{Float64,1}:
          + -0.5
          +  0.5
          +julia> statedim(p)
          +  2
          +julia> inputdim(p)
          +  0
          source
          Systems.IVPType.
          IVP

          IVP is an alias for InitialValueProblem.

          source

          Input Types

          AbstractInput

          Abstract supertype for all input types.

          Notes

          The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

          Iteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

          A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

          source
          ConstantInput{UT} <: AbstractInput

          Type representing an input that remains constant in time.

          Fields

          • U – input set

          Examples

          The constant input holds a single element and its length is infinite. To access the field U, you can use Base's next given a state, or the method nextinput given the number of desired input elements:

          julia> c = ConstantInput(-1//2)
          +Systems.ConstantInput{Rational{Int64}}(-1//2)
          +
          +julia> next(c, 1)
          +(-1//2, nothing)
          +
          +julia> next(c, 2)
          +(-1//2, nothing)
          +
          +julia> collect(nextinput(c, 4))
          +4-element Array{Rational{Int64},1}:
          + -1//2
          + -1//2
          + -1//2
          + -1//2

          The elements of this input are rational numbers:

          julia> eltype(c)
          +Rational{Int64}

          To transform a constant input, you can use map as in:

          julia> map(x->2*x, c)
          +Systems.ConstantInput{Rational{Int64}}(-1//1)
          source
          VaryingInput{UT} <: AbstractInput

          Type representing an input that may vary with time.

          Fields

          • U – vector of input sets

          Examples

          The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

          julia> v = VaryingInput([-1//2, 1//2])
          +Systems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])
          +
          +julia> length(v)
          +2
          +
          +julia> eltype(v)
          +Rational{Int64}

          Base's next method receives the input and an integer state and returns the input element and the next iteration state:

          julia> next(v, 1)
          +(-1//2, 2)
          +
          +julia> next(v, 2)
          +(1//2, 3)

          The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

          julia> typeof(nextinput(v))
          +Base.Iterators.Take{Systems.VaryingInput{Rational{Int64}}}
          +
          +julia> collect(nextinput(v, 1))
          +1-element Array{Rational{Int64},1}:
          + -1//2
          +
          +julia> collect(nextinput(v, 2))
          +2-element Array{Rational{Int64},1}:
          + -1//2
          +  1//2

          You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

          julia> collect(v)
          +2-element Array{Rational{Int64},1}:
          + -1//2
          +  1//2
          +
          +julia> [2*vi for vi in v]
          +2-element Array{Rational{Int64},1}:
          + -1//1
          +  1//1

          Since this input type is finite, querying more elements than its length returns the full vector:

          julia> collect(nextinput(v, 4))
          +2-element Array{Rational{Int64},1}:
          + -1//2
          +  1//2

          To transform a varying input, you can use map as in:

          julia> map(x->2*x, v)
          +Systems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])
          source
          diff --git a/v0.1.0/search.html b/v0.1.0/search.html new file mode 100644 index 00000000..08f1586e --- /dev/null +++ b/v0.1.0/search.html @@ -0,0 +1,2 @@ + +Search · Systems.jl

          Search

          Search

          Number of results: loading...

            diff --git a/v0.1.0/search_index.js b/v0.1.0/search_index.js new file mode 100644 index 00000000..bf0f7a22 --- /dev/null +++ b/v0.1.0/search_index.js @@ -0,0 +1,419 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "index.html#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "index.html#Systems.jl-1", + "page": "Home", + "title": "Systems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]Systems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "index.html#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled,linear algebraic, etc.Iterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "index.html#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types.html#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types.html#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in Systems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = Systems\nDocTestSetup = quote\n using Systems\nend" +}, + +{ + "location": "lib/types.html#Systems.AbstractSystem", + "page": "Types", + "title": "Systems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.AbstractContinuousSystem", + "page": "Types", + "title": "Systems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.AbstractDiscreteSystem", + "page": "Types", + "title": "Systems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types.html#Systems.ContinuousIdentitySystem", + "page": "Types", + "title": "Systems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form\n\nx = 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "Systems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form\n\nx = 0x(t) mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearContinuousSystem", + "page": "Types", + "title": "Systems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form\n\nx = A x\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearControlContinuousSystem", + "page": "Types", + "title": "Systems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form\n\nx = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nx = A xx(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form\n\nx = A x + B ux(t) mathcalXu(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "Systems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form\n\nE x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nE x = A xx(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem" +}, + +{ + "location": "lib/types.html#Systems.DiscreteIdentitySystem", + "page": "Types", + "title": "Systems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form\n\nx_k+1 = x_k\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "Systems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form\n\nx_k+1 = x_kx_k mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearDiscreteSystem", + "page": "Types", + "title": "Systems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form\n\nx_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearControlDiscreteSystem", + "page": "Types", + "title": "Systems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form\n\nx_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nx_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form\n\nx_k+1 = A x_k + B u_kx_k mathcalXu_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "Systems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form\n\nE x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nE x_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem" +}, + +{ + "location": "lib/types.html#Systems.InitialValueProblem", + "page": "Types", + "title": "Systems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\njulia> statedim(p)\n 2\njulia> inputdim(p)\n 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.IVP", + "page": "Types", + "title": "Systems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types.html#Systems.AbstractInput", + "page": "Types", + "title": "Systems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstantInput", + "page": "Types", + "title": "Systems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s next given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nSystems.ConstantInput{Rational{Int64}}(-1//2)\n\njulia> next(c, 1)\n(-1//2, nothing)\n\njulia> next(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nSystems.ConstantInput{Rational{Int64}}(-1//1)\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.VaryingInput", + "page": "Types", + "title": "Systems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s next method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> next(v, 1)\n(-1//2, 2)\n\njulia> next(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{Systems.VaryingInput{Rational{Int64}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n" +}, + +{ + "location": "lib/types.html#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/methods.html#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods.html#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in Systems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = Systems\nDocTestSetup = quote\n using Systems\nend" +}, + +{ + "location": "lib/methods.html#Systems.statedim", + "page": "Methods", + "title": "Systems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Systems.stateset", + "page": "Methods", + "title": "Systems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods.html#Systems.inputdim", + "page": "Methods", + "title": "Systems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Systems.inputset", + "page": "Methods", + "title": "Systems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Systems.nextinput", + "page": "Methods", + "title": "Systems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "about.html#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about.html#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about.html#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about.html#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about.html#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"Systems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about.html#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about.html#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia" +}, + +{ + "location": "about.html#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to Systems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/v0.1.0/siteinfo.js b/v0.1.0/siteinfo.js new file mode 100644 index 00000000..a7a85ce6 --- /dev/null +++ b/v0.1.0/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.0"; diff --git a/v0.1.1/about.html b/v0.1.1/about.html new file mode 100644 index 00000000..df8362ad --- /dev/null +++ b/v0.1.1/about.html @@ -0,0 +1,2 @@ + +About · Systems.jl

            About

            About

            This page contains some general information about this project, and recommendations about contributing.

            Contributing

            If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

            Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

            Branches and pull requests (PR)

            We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

            Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

            Unit testing and continuous integration (CI)

            This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

            When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

            $ julia --color=yes test/runtests.jl

            Alternatively, you can achieve the same from inside the REPL using the following command:

            julia> Pkg.test("Systems")

            We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

            Contributing to the documentation

            New functions and types should be documented according to our guidelines directly in the source code.

            You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

            julia> ?LinearContinuousSystem

            This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

            To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

            $ julia --color=yes docs/make.jl

            Note that this also runs all doctests which will take some time.

            Related projects

            This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

            Below we list more related projects.

            Package nameDescription
            HybridSystems.jlHybrid Systems definitions in Julia.
            LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
            ControlToolbox.jlAnalysis and design tools for control systems.
            ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
            DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
            ControlSystems.jlA Control Systems Toolbox for Julia
            ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

            Credits

            These persons have contributed to Systems.jl (in alphabetic order):

            diff --git a/v0.1.1/assets/arrow.svg b/v0.1.1/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.1.1/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.1.1/assets/documenter.css b/v0.1.1/assets/documenter.css new file mode 100644 index 00000000..dc1b4cf5 --- /dev/null +++ b/v0.1.1/assets/documenter.css @@ -0,0 +1,577 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

            the is very first thing on the page (i.e. the second element + * in the
            , * after the
            , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
             surrounding the , while
            + * highlight.js applies the .hljs style directly to the  tag.
            + */
            +.hljs {
            +    background-color: transparent;
            +    padding: 0;
            +}
            +
            +@media only screen and (max-width: 768px) {
            +    nav.toc {
            +        position: fixed;
            +        overflow-y: scroll;
            +        width: 16em;
            +        left: -16em;
            +        -webkit-overflow-scrolling: touch;
            +        -webkit-transition-property: left; /* Safari */
            +        -webkit-transition-duration: 0.3s; /* Safari */
            +        transition-property: left;
            +        transition-duration: 0.3s;
            +        -webkit-transition-timing-function: ease-out; /* Safari */
            +        transition-timing-function: ease-out;
            +        z-index: 2;
            +    }
            +
            +    nav.toc.show {
            +        left: 0;
            +    }
            +
            +    article {
            +        margin-left: 0;
            +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
            +        overflow-wrap: break-word;
            +    }
            +
            +    article > header {
            +        position: fixed;
            +        left: 0;
            +        z-index: 1;
            +    }
            +
            +    article > header nav, hr {
            +        display: none;
            +    }
            +
            +    article > header div#topbar {
            +        display: block; /* is mobile */
            +        position: fixed;
            +        width: 100%;
            +        height: 1.5em;
            +        padding-top: 1em;
            +        padding-bottom: 1em;
            +        background-color: #fcfcfc;
            +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
            +        top: 0;
            +        -webkit-transition-property: top; /* Safari */
            +        -webkit-transition-duration: 0.3s; /* Safari */
            +        transition-property: top;
            +        transition-duration: 0.3s;
            +    }
            +
            +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
            +        top: -4em;
            +        -webkit-transition-property: top; /* Safari */
            +        -webkit-transition-duration: 0.7s; /* Safari */
            +        transition-property: top;
            +        transition-duration: 0.7s;
            +    }
            +
            +    article > header div#topbar span {
            +        position: fixed;
            +        width: 80%;
            +        height: 1.5em;
            +        margin-top: -0.1em;
            +        margin-left: 0.9em;
            +        font-size: 1.2em;
            +        overflow: hidden;
            +    }
            +
            +    article > header div#topbar a.fa-bars {
            +        float: right;
            +        padding: 0.6em;
            +        margin-top: -0.6em;
            +        margin-right: 0.3em;
            +        font-size: 1.5em;
            +    }
            +
            +    article > header div#topbar a.fa-bars:visited {
            +        color: #3091d1;
            +    }
            +
            +    article table {
            +        overflow-x: auto;
            +        display: block;
            +    }
            +
            +    article div.MathJax_Display {
            +        overflow: scroll;
            +    }
            +
            +    article span.MathJax {
            +        overflow: hidden;
            +    }
            +}
            +
            +@media only screen and (max-width: 320px) {
            +    body {
            +        font-size: 15px;
            +    }
            +}
            diff --git a/v0.1.1/assets/documenter.js b/v0.1.1/assets/documenter.js
            new file mode 100644
            index 00000000..5d31622f
            --- /dev/null
            +++ b/v0.1.1/assets/documenter.js
            @@ -0,0 +1,129 @@
            +/*
            + * Part of Documenter.jl
            + *     https://github.com/JuliaDocs/Documenter.jl
            + *
            + * License: MIT
            + */
            +
            +requirejs.config({
            +    paths: {
            +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
            +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
            +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
            +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
            +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
            +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
            +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
            +    },
            +    shim: {
            +        'mathjax' : {
            +            exports: "MathJax"
            +        },
            +        'highlight-julia': ['highlight'],
            +        'highlight-julia-repl': ['highlight'],
            +    }
            +});
            +
            +// Load MathJax
            +require(['mathjax'], function(MathJax) {
            +    MathJax.Hub.Config({
            +      "tex2jax": {
            +        inlineMath: [['$','$'], ['\\(','\\)']],
            +        processEscapes: true
            +      }
            +    });
            +    MathJax.Hub.Config({
            +      config: ["MMLorHTML.js"],
            +      jax: [
            +        "input/TeX",
            +        "output/HTML-CSS",
            +        "output/NativeMML"
            +      ],
            +      extensions: [
            +        "MathMenu.js",
            +        "MathZoom.js",
            +        "TeX/AMSmath.js",
            +        "TeX/AMSsymbols.js",
            +        "TeX/autobold.js",
            +        "TeX/autoload-all.js"
            +      ]
            +    });
            +    MathJax.Hub.Config({
            +      TeX: { equationNumbers: { autoNumber: "AMS" } }
            +    });
            +})
            +
            +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
            +    $(document).ready(function() {
            +        hljs.initHighlighting();
            +    })
            +
            +})
            +
            +// update the version selector with info from the siteinfo.js and ../versions.js files
            +require(['jquery'], function($) {
            +    $(document).ready(function() {
            +        var version_selector = $("#version-selector");
            +
            +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
            +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
            +            var option = $("");
            +            version_selector.append(option);
            +        }
            +
            +        if (typeof DOC_VERSIONS !== 'undefined') {
            +            var existing_versions = $('#version-selector > option');
            +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
            +            DOC_VERSIONS.forEach(function(each) {
            +                var version_url = documenterBaseURL + "/../" + each;
            +                var existing_id = $.inArray(each, existing_versions_texts);
            +                // if not already in the version selector, add it as a new option,
            +                // otherwise update the old option with the URL and enable it
            +                if (existing_id == -1) {
            +                    var option = $("");
            +                    version_selector.append(option);
            +                } else {
            +                    var option = existing_versions[existing_id];
            +                    option.value = version_url;
            +                    option.disabled = false;
            +                }
            +            });
            +        }
            +
            +        // only show the version selector if the selector has been populated
            +        if ($('#version-selector > option').length > 0) {
            +            version_selector.css("visibility", "visible");
            +        }
            +    })
            +
            +})
            +
            +// mobile
            +require(['jquery', 'headroom'], function($, Headroom) {
            +    $(document).ready(function() {
            +        var navtoc = $("nav.toc");
            +        $("nav.toc li.current a.toctext").click(function() {
            +            navtoc.toggleClass('show');
            +        });
            +        $("article > header div#topbar a.fa-bars").click(function(ev) {
            +            ev.preventDefault();
            +            navtoc.toggleClass('show');
            +            if (navtoc.hasClass('show')) {
            +                var title = $("article > header div#topbar span").text();
            +                $("nav.toc ul li a:contains('" + title + "')").focus();
            +            }
            +        });
            +        $("article#docs").bind('click', function(ev) {
            +            if ($(ev.target).is('div#topbar a.fa-bars')) {
            +                return;
            +            }
            +            if (navtoc.hasClass('show')) {
            +                navtoc.removeClass('show');
            +            }
            +        });
            +        if ($("article > header div#topbar").css('display') == 'block') {
            +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
            +            headroom.init();
            +        }
            +    })
            +})
            diff --git a/v0.1.1/assets/juliareach.css b/v0.1.1/assets/juliareach.css
            new file mode 100644
            index 00000000..64b0d92d
            --- /dev/null
            +++ b/v0.1.1/assets/juliareach.css
            @@ -0,0 +1,583 @@
            +/*
            + * The default CSS style for Documenter.jl generated sites
            + *
            + * Heavily inspired by the Julia Sphinx theme
            + *     https://github.com/JuliaLang/JuliaDoc
            + * which extends the sphinx_rtd_theme
            + *     https://github.com/snide/sphinx_rtd_theme
            + *
            + * Part of Documenter.jl
            + *     https://github.com/JuliaDocs/Documenter.jl
            + *
            + * License: MIT
            + */
            +
            +/* The original CSS is modified such that it right-justifies the text. */
            +
            +/* fonts */
            +body, input {
            +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
            +  font-size: 16px;
            +  color: #222;
            +  text-rendering: optimizeLegibility;
            +}
            +
            +pre, code, kbd {
            +  font-family: 'Roboto Mono', Monaco, courier, monospace;
            +  font-size: 0.90em;
            +}
            +
            +pre code {
            +  font-size: 1em;
            +}
            +
            +a {
            +    color: #2980b9;
            +    text-decoration: none;
            +}
            +
            +a:hover {
            +    color: #3091d1;
            +}
            +
            +a:visited {
            +    color: #9b59b6;
            +}
            +
            +body {
            +    line-height: 1.5;
            +}
            +
            +h1 {
            +    font-size: 1.75em;
            +}
            +
            +/* Unless the 

            the is very first thing on the page (i.e. the second element + * in the
            , * after the
            , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
             surrounding the , while
            + * highlight.js applies the .hljs style directly to the  tag.
            + */
            +.hljs {
            +    background-color: transparent;
            +    padding: 0;
            +}
            +
            +@media only screen and (max-width: 768px) {
            +    nav.toc {
            +        position: fixed;
            +        overflow-y: scroll;
            +        width: 16em;
            +        left: -16em;
            +        -webkit-overflow-scrolling: touch;
            +        -webkit-transition-property: left; /* Safari */
            +        -webkit-transition-duration: 0.3s; /* Safari */
            +        transition-property: left;
            +        transition-duration: 0.3s;
            +        -webkit-transition-timing-function: ease-out; /* Safari */
            +        transition-timing-function: ease-out;
            +        z-index: 2;
            +    }
            +
            +    nav.toc.show {
            +        left: 0;
            +    }
            +
            +    article {
            +        margin-left: 0;
            +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
            +        overflow-wrap: break-word;
            +    }
            +
            +    article > header {
            +        position: fixed;
            +        left: 0;
            +        z-index: 1;
            +    }
            +
            +    article > header nav, hr {
            +        display: none;
            +    }
            +
            +    article > header div#topbar {
            +        display: block; /* is mobile */
            +        position: fixed;
            +        width: 100%;
            +        height: 1.5em;
            +        padding-top: 1em;
            +        padding-bottom: 1em;
            +        background-color: #fcfcfc;
            +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
            +        top: 0;
            +        -webkit-transition-property: top; /* Safari */
            +        -webkit-transition-duration: 0.3s; /* Safari */
            +        transition-property: top;
            +        transition-duration: 0.3s;
            +    }
            +
            +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
            +        top: -4em;
            +        -webkit-transition-property: top; /* Safari */
            +        -webkit-transition-duration: 0.7s; /* Safari */
            +        transition-property: top;
            +        transition-duration: 0.7s;
            +    }
            +
            +    article > header div#topbar span {
            +        position: fixed;
            +        width: 80%;
            +        height: 1.5em;
            +        margin-top: -0.1em;
            +        margin-left: 0.9em;
            +        font-size: 1.2em;
            +        overflow: hidden;
            +    }
            +
            +    article > header div#topbar a.fa-bars {
            +        float: right;
            +        padding: 0.6em;
            +        margin-top: -0.6em;
            +        margin-right: 0.3em;
            +        font-size: 1.5em;
            +    }
            +
            +    article > header div#topbar a.fa-bars:visited {
            +        color: #3091d1;
            +    }
            +
            +    article table {
            +        overflow-x: auto;
            +        display: block;
            +    }
            +
            +    article div.MathJax_Display {
            +        overflow: scroll;
            +    }
            +
            +    article span.MathJax {
            +        overflow: hidden;
            +    }
            +}
            +
            +@media only screen and (max-width: 320px) {
            +    body {
            +        font-size: 15px;
            +    }
            +}
            diff --git a/v0.1.1/assets/search.js b/v0.1.1/assets/search.js
            new file mode 100644
            index 00000000..5eb7fee8
            --- /dev/null
            +++ b/v0.1.1/assets/search.js
            @@ -0,0 +1,243 @@
            +/*
            + * Part of Documenter.jl
            + *     https://github.com/JuliaDocs/Documenter.jl
            + *
            + * License: MIT
            + */
            +
            +// parseUri 1.2.2
            +// (c) Steven Levithan 
            +// MIT License
            +function parseUri (str) {
            +	var	o   = parseUri.options,
            +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
            +		uri = {},
            +		i   = 14;
            +
            +	while (i--) uri[o.key[i]] = m[i] || "";
            +
            +	uri[o.q.name] = {};
            +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
            +		if ($1) uri[o.q.name][$1] = $2;
            +	});
            +
            +	return uri;
            +};
            +parseUri.options = {
            +	strictMode: false,
            +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
            +	q:   {
            +		name:   "queryKey",
            +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
            +	},
            +	parser: {
            +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
            +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
            +	}
            +};
            +
            +requirejs.config({
            +    paths: {
            +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
            +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.1.3/lunr.min',
            +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
            +    }
            +});
            +
            +var currentScript = document.currentScript;
            +
            +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
            +    $("#search-form").submit(function(e) {
            +        e.preventDefault()
            +    })
            +
            +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
            +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
            +    // ideally we'd just filter the original list but it's not available as a variable
            +    lunr.stopWordFilter = lunr.generateStopWordFilter([
            +        'a',
            +        'able',
            +        'about',
            +        'across',
            +        'after',
            +        'almost',
            +        'also',
            +        'am',
            +        'among',
            +        'an',
            +        'and',
            +        'are',
            +        'as',
            +        'at',
            +        'be',
            +        'because',
            +        'been',
            +        'but',
            +        'by',
            +        'can',
            +        'cannot',
            +        'could',
            +        'dear',
            +        'did',
            +        'does',
            +        'either',
            +        'ever',
            +        'every',
            +        'from',
            +        'got',
            +        'had',
            +        'has',
            +        'have',
            +        'he',
            +        'her',
            +        'hers',
            +        'him',
            +        'his',
            +        'how',
            +        'however',
            +        'i',
            +        'if',
            +        'into',
            +        'it',
            +        'its',
            +        'just',
            +        'least',
            +        'like',
            +        'likely',
            +        'may',
            +        'me',
            +        'might',
            +        'most',
            +        'must',
            +        'my',
            +        'neither',
            +        'no',
            +        'nor',
            +        'not',
            +        'of',
            +        'off',
            +        'often',
            +        'on',
            +        'only',
            +        'or',
            +        'other',
            +        'our',
            +        'own',
            +        'rather',
            +        'said',
            +        'say',
            +        'says',
            +        'she',
            +        'should',
            +        'since',
            +        'so',
            +        'some',
            +        'than',
            +        'that',
            +        'the',
            +        'their',
            +        'them',
            +        'then',
            +        'there',
            +        'these',
            +        'they',
            +        'this',
            +        'tis',
            +        'to',
            +        'too',
            +        'twas',
            +        'us',
            +        'wants',
            +        'was',
            +        'we',
            +        'were',
            +        'what',
            +        'when',
            +        'who',
            +        'whom',
            +        'why',
            +        'will',
            +        'would',
            +        'yet',
            +        'you',
            +        'your'
            +        ])
            +
            +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
            +    // would not find anything if searching for "add!", only for the entire qualification
            +    lunr.tokenizer.separator = /[\s\-\.]+/
            +
            +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
            +    lunr.trimmer = function (token) {
            +        return token.update(function (s) {
            +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
            +        })
            +    }
            +
            +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
            +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
            +
            +    var index = lunr(function () {
            +        this.ref('location')
            +        this.field('title')
            +        this.field('text')
            +        documenterSearchIndex['docs'].forEach(function(e) {
            +            this.add(e)
            +        }, this)
            +    })
            +    var store = {}
            +
            +    documenterSearchIndex['docs'].forEach(function(e) {
            +        store[e.location] = {title: e.title, category: e.category}
            +    })
            +
            +    $(function(){
            +        function update_search(querystring) {
            +            tokens = lunr.tokenizer(querystring)
            +            results = index.query(function (q) {
            +                tokens.forEach(function (t) {
            +                    q.term(t.toString(), {
            +                        fields: ["title"],
            +                        boost: 10,
            +                        usePipeline: false,
            +                        editDistance: 2,
            +                        wildcard: lunr.Query.wildcard.NONE
            +                    })
            +                    q.term(t.toString(), {
            +                        fields: ["text"],
            +                        boost: 1,
            +                        usePipeline: true,
            +                        editDistance: 2,
            +                        wildcard: lunr.Query.wildcard.NONE
            +                    })
            +                })
            +            })
            +            $('#search-info').text("Number of results: " + results.length)
            +            $('#search-results').empty()
            +            results.forEach(function(result) {
            +                data = store[result.ref]
            +                link = $('')
            +                link.text(data.title)
            +                link.attr('href', documenterBaseURL+'/'+result.ref)
            +                cat = $('('+data.category+')')
            +                li = $('
          • ').append(link).append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.1.1/index.html b/v0.1.1/index.html new file mode 100644 index 00000000..753e3b05 --- /dev/null +++ b/v0.1.1/index.html @@ -0,0 +1,2 @@ + +Home · Systems.jl diff --git a/v0.1.1/lib/methods.html b/v0.1.1/lib/methods.html new file mode 100644 index 00000000..76e22f4d --- /dev/null +++ b/v0.1.1/lib/methods.html @@ -0,0 +1,2 @@ + +Methods · Systems.jl

            Methods

            Methods

            This section describes systems methods implemented in Systems.jl.

            States

            Systems.statedimFunction.
            statedim(s::AbstractSystem)

            Returns the dimension of the state space of system s.

            source
            Systems.statesetFunction.
            stateset(s::AbstractSystem)

            Returns the set of allowed states of system s.

            source

            Inputs

            Systems.inputdimFunction.
            inputdim(s::AbstractSystem)

            Returns the dimension of the input space of system s.

            source
            Systems.inputsetFunction.
            inputset(s::AbstractSystem)

            Returns the set of allowed inputs of system s.

            source
            Systems.nextinputFunction.
            nextinput(input::ConstantInput, n::Int=1)

            Returns the first n elements of this input.

            Input

            • input – a constant input

            • n – (optional, default: 1) the number of desired elements

            Output

            A repeated iterator that generates n equal samples of this input.

            source
            nextinput(input::VaryingInput, n::Int=1)

            Returns the first n elements of this input.

            Input

            • input – varying input

            • n – (optional, default: 1) number of desired elements

            Output

            An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

            source
            diff --git a/v0.1.1/lib/types.html b/v0.1.1/lib/types.html new file mode 100644 index 00000000..efed2576 --- /dev/null +++ b/v0.1.1/lib/types.html @@ -0,0 +1,60 @@ + +Types · Systems.jl

            Types

            Types

            This section describes systems types implemented in Systems.jl.

            Abstract Systems

            AbstractSystem

            Abstract supertype for all system types.

            source
            AbstractContinuousSystem

            Abstract supertype for all continuous system types.

            source
            AbstractDiscreteSystem

            Abstract supertype for all discrete system types.

            source

            Continuous Systems

            ContinuousIdentitySystem <: AbstractContinuousSystem

            Trivial identity continuous-time system of the form

            \[x' = 0.\]
            source
            ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

            Trivial identity continuous-time system with state constraints of the form

            \[x' = 0, x(t) ∈ \mathcal{X}.\]
            source
            LinearContinuousSystem

            Continuous-time linear system of the form

            \[x' = A x.\]

            Fields

            • A – square matrix

            source
            LinearControlContinuousSystem

            Continuous-time linear control system of the form

            \[x' = A x + B u.\]

            Fields

            • A – square matrix

            • B – matrix

            source
            ConstrainedLinearContinuousSystem

            Continuous-time linear system with state constraints of the form

            \[x' = A x, x(t) ∈ \mathcal{X}.\]

            Fields

            • A – square matrix

            • X – state constraints

            source
            ConstrainedLinearControlContinuousSystem

            Continuous-time linear control system with state constraints of the form

            \[x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

            Fields

            • A – square matrix

            • B – matrix

            • X – state constraints

            • U – input constraints

            source
            LinearAlgebraicContinuousSystem

            Continuous-time linear algebraic system of the form

            \[E x' = A x.\]

            Fields

            • A – matrix

            • E – matrix, same size as A

            source
            ConstrainedLinearAlgebraicContinuousSystem

            Continuous-time linear system with state constraints of the form

            \[E x' = A x, x(t) ∈ \mathcal{X}.\]

            Fields

            • A – matrix

            • E – matrix, same size as A

            • X – state constraints

            source

            Discrete Systems

            DiscreteIdentitySystem <: AbstractDiscreteSystem

            Trivial identity discrete-time system of the form

            \[x_{k+1} = x_k.\]
            source
            ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

            Trivial identity discrete-time system with state constraints of the form

            \[x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]
            source
            LinearDiscreteSystem

            Discrete-time linear system of the form

            \[x_{k+1} = A x_k.\]

            Fields

            • A – square matrix

            source
            LinearControlDiscreteSystem

            Discrete-time linear control system of the form

            \[x_{k+1} = A x_k + B u_k.\]

            Fields

            • A – square matrix

            • B – matrix

            source
            ConstrainedLinearDiscreteSystem

            Discrete-time linear system with state constraints of the form

            \[x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

            Fields

            • A – square matrix

            • X – state constraints

            source
            ConstrainedLinearControlDiscreteSystem

            Discrete-time linear control system with state constraints of the form

            \[x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

            Fields

            • A – square matrix

            • B – matrix

            • X – state constraints

            • U – input constraints

            source
            LinearAlgebraicDiscreteSystem

            Discrete-time linear algebraic system of the form

            \[E x_{k+1} = A x_k.\]

            Fields

            • A – matrix

            • E – matrix, same size as A

            source
            ConstrainedLinearAlgebraicDiscreteSystem

            Discrete-time linear system with state constraints of the form

            \[E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

            Fields

            • A – matrix

            • E – matrix, same size as A

            • X – state constraints

            source

            Initial Value Problems

            InitialValueProblem

            Parametric composite type for initial value problems. It is parameterized in the system's type.

            Fields

            • s – system

            • x0 – initial state

            Examples

            The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

            julia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);
            +
            +julia> p.x0
            +2-element Array{Float64,1}:
            + -0.5
            +  0.5
            +julia> statedim(p)
            +  2
            +julia> inputdim(p)
            +  0
            source
            Systems.IVPType.
            IVP

            IVP is an alias for InitialValueProblem.

            source

            Input Types

            AbstractInput

            Abstract supertype for all input types.

            Notes

            The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

            Iteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

            A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

            source
            ConstantInput{UT} <: AbstractInput

            Type representing an input that remains constant in time.

            Fields

            • U – input set

            Examples

            The constant input holds a single element and its length is infinite. To access the field U, you can use Base's next given a state, or the method nextinput given the number of desired input elements:

            julia> c = ConstantInput(-1//2)
            +Systems.ConstantInput{Rational{Int64}}(-1//2)
            +
            +julia> next(c, 1)
            +(-1//2, nothing)
            +
            +julia> next(c, 2)
            +(-1//2, nothing)
            +
            +julia> collect(nextinput(c, 4))
            +4-element Array{Rational{Int64},1}:
            + -1//2
            + -1//2
            + -1//2
            + -1//2

            The elements of this input are rational numbers:

            julia> eltype(c)
            +Rational{Int64}

            To transform a constant input, you can use map as in:

            julia> map(x->2*x, c)
            +Systems.ConstantInput{Rational{Int64}}(-1//1)
            source
            VaryingInput{UT} <: AbstractInput

            Type representing an input that may vary with time.

            Fields

            • U – vector of input sets

            Examples

            The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

            julia> v = VaryingInput([-1//2, 1//2])
            +Systems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])
            +
            +julia> length(v)
            +2
            +
            +julia> eltype(v)
            +Rational{Int64}

            Base's next method receives the input and an integer state and returns the input element and the next iteration state:

            julia> next(v, 1)
            +(-1//2, 2)
            +
            +julia> next(v, 2)
            +(1//2, 3)

            The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

            julia> typeof(nextinput(v))
            +Base.Iterators.Take{Systems.VaryingInput{Rational{Int64}}}
            +
            +julia> collect(nextinput(v, 1))
            +1-element Array{Rational{Int64},1}:
            + -1//2
            +
            +julia> collect(nextinput(v, 2))
            +2-element Array{Rational{Int64},1}:
            + -1//2
            +  1//2

            You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

            julia> collect(v)
            +2-element Array{Rational{Int64},1}:
            + -1//2
            +  1//2
            +
            +julia> [2*vi for vi in v]
            +2-element Array{Rational{Int64},1}:
            + -1//1
            +  1//1

            Since this input type is finite, querying more elements than its length returns the full vector:

            julia> collect(nextinput(v, 4))
            +2-element Array{Rational{Int64},1}:
            + -1//2
            +  1//2

            To transform a varying input, you can use map as in:

            julia> map(x->2*x, v)
            +Systems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])
            source
            diff --git a/v0.1.1/search.html b/v0.1.1/search.html new file mode 100644 index 00000000..08f1586e --- /dev/null +++ b/v0.1.1/search.html @@ -0,0 +1,2 @@ + +Search · Systems.jl

            Search

            Search

            Number of results: loading...

              diff --git a/v0.1.1/search_index.js b/v0.1.1/search_index.js new file mode 100644 index 00000000..dff6e14a --- /dev/null +++ b/v0.1.1/search_index.js @@ -0,0 +1,419 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "index.html#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "index.html#Systems.jl-1", + "page": "Home", + "title": "Systems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]Systems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "index.html#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled,linear algebraic, etc.Iterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "index.html#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types.html#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types.html#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in Systems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = Systems\nDocTestSetup = quote\n using Systems\nend" +}, + +{ + "location": "lib/types.html#Systems.AbstractSystem", + "page": "Types", + "title": "Systems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.AbstractContinuousSystem", + "page": "Types", + "title": "Systems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.AbstractDiscreteSystem", + "page": "Types", + "title": "Systems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types.html#Systems.ContinuousIdentitySystem", + "page": "Types", + "title": "Systems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form\n\nx = 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "Systems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form\n\nx = 0x(t) mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearContinuousSystem", + "page": "Types", + "title": "Systems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form\n\nx = A x\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearControlContinuousSystem", + "page": "Types", + "title": "Systems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form\n\nx = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nx = A xx(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form\n\nx = A x + B ux(t) mathcalXu(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "Systems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form\n\nE x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nE x = A xx(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem" +}, + +{ + "location": "lib/types.html#Systems.DiscreteIdentitySystem", + "page": "Types", + "title": "Systems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form\n\nx_k+1 = x_k\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "Systems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form\n\nx_k+1 = x_kx_k mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearDiscreteSystem", + "page": "Types", + "title": "Systems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form\n\nx_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearControlDiscreteSystem", + "page": "Types", + "title": "Systems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form\n\nx_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nx_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form\n\nx_k+1 = A x_k + B u_kx_k mathcalXu_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "Systems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form\n\nE x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "Systems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nE x_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem" +}, + +{ + "location": "lib/types.html#Systems.InitialValueProblem", + "page": "Types", + "title": "Systems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\njulia> statedim(p)\n 2\njulia> inputdim(p)\n 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.IVP", + "page": "Types", + "title": "Systems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types.html#Systems.AbstractInput", + "page": "Types", + "title": "Systems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.ConstantInput", + "page": "Types", + "title": "Systems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s next given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nSystems.ConstantInput{Rational{Int64}}(-1//2)\n\njulia> next(c, 1)\n(-1//2, nothing)\n\njulia> next(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nSystems.ConstantInput{Rational{Int64}}(-1//1)\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems.VaryingInput", + "page": "Types", + "title": "Systems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s next method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> next(v, 1)\n(-1//2, 2)\n\njulia> next(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{Systems.VaryingInput{Rational{Int64}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n" +}, + +{ + "location": "lib/types.html#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/methods.html#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods.html#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in Systems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = Systems\nDocTestSetup = quote\n using Systems\nend" +}, + +{ + "location": "lib/methods.html#Systems.statedim", + "page": "Methods", + "title": "Systems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Systems.stateset", + "page": "Methods", + "title": "Systems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods.html#Systems.inputdim", + "page": "Methods", + "title": "Systems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Systems.inputset", + "page": "Methods", + "title": "Systems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Systems.nextinput", + "page": "Methods", + "title": "Systems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "about.html#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about.html#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about.html#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about.html#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about.html#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"Systems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about.html#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about.html#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about.html#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to Systems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/v0.1.1/siteinfo.js b/v0.1.1/siteinfo.js new file mode 100644 index 00000000..20089fd7 --- /dev/null +++ b/v0.1.1/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.1"; diff --git a/v0.1.2/about.html b/v0.1.2/about.html new file mode 100644 index 00000000..d4843f0d --- /dev/null +++ b/v0.1.2/about.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

              About

              About

              This page contains some general information about this project, and recommendations about contributing.

              Contributing

              If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

              Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

              Branches and pull requests (PR)

              We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

              Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

              Unit testing and continuous integration (CI)

              This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

              When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

              $ julia --color=yes test/runtests.jl

              Alternatively, you can achieve the same from inside the REPL using the following command:

              julia> Pkg.test("MathematicalSystems")

              We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

              Contributing to the documentation

              New functions and types should be documented according to our guidelines directly in the source code.

              You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

              julia> ?LinearContinuousSystem

              This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

              To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

              $ julia --color=yes docs/make.jl

              Note that this also runs all doctests which will take some time.

              Related projects

              This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

              Below we list more related projects.

              Package nameDescription
              HybridSystems.jlHybrid Systems definitions in Julia.
              LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
              ControlToolbox.jlAnalysis and design tools for control systems.
              ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
              DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
              ControlSystems.jlA Control Systems Toolbox for Julia
              ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

              Credits

              These persons have contributed to MathematicalSystems.jl (in alphabetic order):

              diff --git a/v0.1.2/assets/arrow.svg b/v0.1.2/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.1.2/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.1.2/assets/documenter.css b/v0.1.2/assets/documenter.css new file mode 100644 index 00000000..dc1b4cf5 --- /dev/null +++ b/v0.1.2/assets/documenter.css @@ -0,0 +1,577 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

              the is very first thing on the page (i.e. the second element + * in the
              , * after the
              , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
               surrounding the , while
              + * highlight.js applies the .hljs style directly to the  tag.
              + */
              +.hljs {
              +    background-color: transparent;
              +    padding: 0;
              +}
              +
              +@media only screen and (max-width: 768px) {
              +    nav.toc {
              +        position: fixed;
              +        overflow-y: scroll;
              +        width: 16em;
              +        left: -16em;
              +        -webkit-overflow-scrolling: touch;
              +        -webkit-transition-property: left; /* Safari */
              +        -webkit-transition-duration: 0.3s; /* Safari */
              +        transition-property: left;
              +        transition-duration: 0.3s;
              +        -webkit-transition-timing-function: ease-out; /* Safari */
              +        transition-timing-function: ease-out;
              +        z-index: 2;
              +    }
              +
              +    nav.toc.show {
              +        left: 0;
              +    }
              +
              +    article {
              +        margin-left: 0;
              +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
              +        overflow-wrap: break-word;
              +    }
              +
              +    article > header {
              +        position: fixed;
              +        left: 0;
              +        z-index: 1;
              +    }
              +
              +    article > header nav, hr {
              +        display: none;
              +    }
              +
              +    article > header div#topbar {
              +        display: block; /* is mobile */
              +        position: fixed;
              +        width: 100%;
              +        height: 1.5em;
              +        padding-top: 1em;
              +        padding-bottom: 1em;
              +        background-color: #fcfcfc;
              +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
              +        top: 0;
              +        -webkit-transition-property: top; /* Safari */
              +        -webkit-transition-duration: 0.3s; /* Safari */
              +        transition-property: top;
              +        transition-duration: 0.3s;
              +    }
              +
              +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
              +        top: -4em;
              +        -webkit-transition-property: top; /* Safari */
              +        -webkit-transition-duration: 0.7s; /* Safari */
              +        transition-property: top;
              +        transition-duration: 0.7s;
              +    }
              +
              +    article > header div#topbar span {
              +        position: fixed;
              +        width: 80%;
              +        height: 1.5em;
              +        margin-top: -0.1em;
              +        margin-left: 0.9em;
              +        font-size: 1.2em;
              +        overflow: hidden;
              +    }
              +
              +    article > header div#topbar a.fa-bars {
              +        float: right;
              +        padding: 0.6em;
              +        margin-top: -0.6em;
              +        margin-right: 0.3em;
              +        font-size: 1.5em;
              +    }
              +
              +    article > header div#topbar a.fa-bars:visited {
              +        color: #3091d1;
              +    }
              +
              +    article table {
              +        overflow-x: auto;
              +        display: block;
              +    }
              +
              +    article div.MathJax_Display {
              +        overflow: scroll;
              +    }
              +
              +    article span.MathJax {
              +        overflow: hidden;
              +    }
              +}
              +
              +@media only screen and (max-width: 320px) {
              +    body {
              +        font-size: 15px;
              +    }
              +}
              diff --git a/v0.1.2/assets/documenter.js b/v0.1.2/assets/documenter.js
              new file mode 100644
              index 00000000..5d31622f
              --- /dev/null
              +++ b/v0.1.2/assets/documenter.js
              @@ -0,0 +1,129 @@
              +/*
              + * Part of Documenter.jl
              + *     https://github.com/JuliaDocs/Documenter.jl
              + *
              + * License: MIT
              + */
              +
              +requirejs.config({
              +    paths: {
              +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
              +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
              +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
              +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
              +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
              +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
              +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
              +    },
              +    shim: {
              +        'mathjax' : {
              +            exports: "MathJax"
              +        },
              +        'highlight-julia': ['highlight'],
              +        'highlight-julia-repl': ['highlight'],
              +    }
              +});
              +
              +// Load MathJax
              +require(['mathjax'], function(MathJax) {
              +    MathJax.Hub.Config({
              +      "tex2jax": {
              +        inlineMath: [['$','$'], ['\\(','\\)']],
              +        processEscapes: true
              +      }
              +    });
              +    MathJax.Hub.Config({
              +      config: ["MMLorHTML.js"],
              +      jax: [
              +        "input/TeX",
              +        "output/HTML-CSS",
              +        "output/NativeMML"
              +      ],
              +      extensions: [
              +        "MathMenu.js",
              +        "MathZoom.js",
              +        "TeX/AMSmath.js",
              +        "TeX/AMSsymbols.js",
              +        "TeX/autobold.js",
              +        "TeX/autoload-all.js"
              +      ]
              +    });
              +    MathJax.Hub.Config({
              +      TeX: { equationNumbers: { autoNumber: "AMS" } }
              +    });
              +})
              +
              +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
              +    $(document).ready(function() {
              +        hljs.initHighlighting();
              +    })
              +
              +})
              +
              +// update the version selector with info from the siteinfo.js and ../versions.js files
              +require(['jquery'], function($) {
              +    $(document).ready(function() {
              +        var version_selector = $("#version-selector");
              +
              +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
              +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
              +            var option = $("");
              +            version_selector.append(option);
              +        }
              +
              +        if (typeof DOC_VERSIONS !== 'undefined') {
              +            var existing_versions = $('#version-selector > option');
              +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
              +            DOC_VERSIONS.forEach(function(each) {
              +                var version_url = documenterBaseURL + "/../" + each;
              +                var existing_id = $.inArray(each, existing_versions_texts);
              +                // if not already in the version selector, add it as a new option,
              +                // otherwise update the old option with the URL and enable it
              +                if (existing_id == -1) {
              +                    var option = $("");
              +                    version_selector.append(option);
              +                } else {
              +                    var option = existing_versions[existing_id];
              +                    option.value = version_url;
              +                    option.disabled = false;
              +                }
              +            });
              +        }
              +
              +        // only show the version selector if the selector has been populated
              +        if ($('#version-selector > option').length > 0) {
              +            version_selector.css("visibility", "visible");
              +        }
              +    })
              +
              +})
              +
              +// mobile
              +require(['jquery', 'headroom'], function($, Headroom) {
              +    $(document).ready(function() {
              +        var navtoc = $("nav.toc");
              +        $("nav.toc li.current a.toctext").click(function() {
              +            navtoc.toggleClass('show');
              +        });
              +        $("article > header div#topbar a.fa-bars").click(function(ev) {
              +            ev.preventDefault();
              +            navtoc.toggleClass('show');
              +            if (navtoc.hasClass('show')) {
              +                var title = $("article > header div#topbar span").text();
              +                $("nav.toc ul li a:contains('" + title + "')").focus();
              +            }
              +        });
              +        $("article#docs").bind('click', function(ev) {
              +            if ($(ev.target).is('div#topbar a.fa-bars')) {
              +                return;
              +            }
              +            if (navtoc.hasClass('show')) {
              +                navtoc.removeClass('show');
              +            }
              +        });
              +        if ($("article > header div#topbar").css('display') == 'block') {
              +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
              +            headroom.init();
              +        }
              +    })
              +})
              diff --git a/v0.1.2/assets/juliareach.css b/v0.1.2/assets/juliareach.css
              new file mode 100644
              index 00000000..64b0d92d
              --- /dev/null
              +++ b/v0.1.2/assets/juliareach.css
              @@ -0,0 +1,583 @@
              +/*
              + * The default CSS style for Documenter.jl generated sites
              + *
              + * Heavily inspired by the Julia Sphinx theme
              + *     https://github.com/JuliaLang/JuliaDoc
              + * which extends the sphinx_rtd_theme
              + *     https://github.com/snide/sphinx_rtd_theme
              + *
              + * Part of Documenter.jl
              + *     https://github.com/JuliaDocs/Documenter.jl
              + *
              + * License: MIT
              + */
              +
              +/* The original CSS is modified such that it right-justifies the text. */
              +
              +/* fonts */
              +body, input {
              +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
              +  font-size: 16px;
              +  color: #222;
              +  text-rendering: optimizeLegibility;
              +}
              +
              +pre, code, kbd {
              +  font-family: 'Roboto Mono', Monaco, courier, monospace;
              +  font-size: 0.90em;
              +}
              +
              +pre code {
              +  font-size: 1em;
              +}
              +
              +a {
              +    color: #2980b9;
              +    text-decoration: none;
              +}
              +
              +a:hover {
              +    color: #3091d1;
              +}
              +
              +a:visited {
              +    color: #9b59b6;
              +}
              +
              +body {
              +    line-height: 1.5;
              +}
              +
              +h1 {
              +    font-size: 1.75em;
              +}
              +
              +/* Unless the 

              the is very first thing on the page (i.e. the second element + * in the
              , * after the
              , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
               surrounding the , while
              + * highlight.js applies the .hljs style directly to the  tag.
              + */
              +.hljs {
              +    background-color: transparent;
              +    padding: 0;
              +}
              +
              +@media only screen and (max-width: 768px) {
              +    nav.toc {
              +        position: fixed;
              +        overflow-y: scroll;
              +        width: 16em;
              +        left: -16em;
              +        -webkit-overflow-scrolling: touch;
              +        -webkit-transition-property: left; /* Safari */
              +        -webkit-transition-duration: 0.3s; /* Safari */
              +        transition-property: left;
              +        transition-duration: 0.3s;
              +        -webkit-transition-timing-function: ease-out; /* Safari */
              +        transition-timing-function: ease-out;
              +        z-index: 2;
              +    }
              +
              +    nav.toc.show {
              +        left: 0;
              +    }
              +
              +    article {
              +        margin-left: 0;
              +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
              +        overflow-wrap: break-word;
              +    }
              +
              +    article > header {
              +        position: fixed;
              +        left: 0;
              +        z-index: 1;
              +    }
              +
              +    article > header nav, hr {
              +        display: none;
              +    }
              +
              +    article > header div#topbar {
              +        display: block; /* is mobile */
              +        position: fixed;
              +        width: 100%;
              +        height: 1.5em;
              +        padding-top: 1em;
              +        padding-bottom: 1em;
              +        background-color: #fcfcfc;
              +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
              +        top: 0;
              +        -webkit-transition-property: top; /* Safari */
              +        -webkit-transition-duration: 0.3s; /* Safari */
              +        transition-property: top;
              +        transition-duration: 0.3s;
              +    }
              +
              +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
              +        top: -4em;
              +        -webkit-transition-property: top; /* Safari */
              +        -webkit-transition-duration: 0.7s; /* Safari */
              +        transition-property: top;
              +        transition-duration: 0.7s;
              +    }
              +
              +    article > header div#topbar span {
              +        position: fixed;
              +        width: 80%;
              +        height: 1.5em;
              +        margin-top: -0.1em;
              +        margin-left: 0.9em;
              +        font-size: 1.2em;
              +        overflow: hidden;
              +    }
              +
              +    article > header div#topbar a.fa-bars {
              +        float: right;
              +        padding: 0.6em;
              +        margin-top: -0.6em;
              +        margin-right: 0.3em;
              +        font-size: 1.5em;
              +    }
              +
              +    article > header div#topbar a.fa-bars:visited {
              +        color: #3091d1;
              +    }
              +
              +    article table {
              +        overflow-x: auto;
              +        display: block;
              +    }
              +
              +    article div.MathJax_Display {
              +        overflow: scroll;
              +    }
              +
              +    article span.MathJax {
              +        overflow: hidden;
              +    }
              +}
              +
              +@media only screen and (max-width: 320px) {
              +    body {
              +        font-size: 15px;
              +    }
              +}
              diff --git a/v0.1.2/assets/search.js b/v0.1.2/assets/search.js
              new file mode 100644
              index 00000000..5eb7fee8
              --- /dev/null
              +++ b/v0.1.2/assets/search.js
              @@ -0,0 +1,243 @@
              +/*
              + * Part of Documenter.jl
              + *     https://github.com/JuliaDocs/Documenter.jl
              + *
              + * License: MIT
              + */
              +
              +// parseUri 1.2.2
              +// (c) Steven Levithan 
              +// MIT License
              +function parseUri (str) {
              +	var	o   = parseUri.options,
              +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
              +		uri = {},
              +		i   = 14;
              +
              +	while (i--) uri[o.key[i]] = m[i] || "";
              +
              +	uri[o.q.name] = {};
              +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
              +		if ($1) uri[o.q.name][$1] = $2;
              +	});
              +
              +	return uri;
              +};
              +parseUri.options = {
              +	strictMode: false,
              +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
              +	q:   {
              +		name:   "queryKey",
              +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
              +	},
              +	parser: {
              +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
              +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
              +	}
              +};
              +
              +requirejs.config({
              +    paths: {
              +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
              +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.1.3/lunr.min',
              +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
              +    }
              +});
              +
              +var currentScript = document.currentScript;
              +
              +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
              +    $("#search-form").submit(function(e) {
              +        e.preventDefault()
              +    })
              +
              +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
              +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
              +    // ideally we'd just filter the original list but it's not available as a variable
              +    lunr.stopWordFilter = lunr.generateStopWordFilter([
              +        'a',
              +        'able',
              +        'about',
              +        'across',
              +        'after',
              +        'almost',
              +        'also',
              +        'am',
              +        'among',
              +        'an',
              +        'and',
              +        'are',
              +        'as',
              +        'at',
              +        'be',
              +        'because',
              +        'been',
              +        'but',
              +        'by',
              +        'can',
              +        'cannot',
              +        'could',
              +        'dear',
              +        'did',
              +        'does',
              +        'either',
              +        'ever',
              +        'every',
              +        'from',
              +        'got',
              +        'had',
              +        'has',
              +        'have',
              +        'he',
              +        'her',
              +        'hers',
              +        'him',
              +        'his',
              +        'how',
              +        'however',
              +        'i',
              +        'if',
              +        'into',
              +        'it',
              +        'its',
              +        'just',
              +        'least',
              +        'like',
              +        'likely',
              +        'may',
              +        'me',
              +        'might',
              +        'most',
              +        'must',
              +        'my',
              +        'neither',
              +        'no',
              +        'nor',
              +        'not',
              +        'of',
              +        'off',
              +        'often',
              +        'on',
              +        'only',
              +        'or',
              +        'other',
              +        'our',
              +        'own',
              +        'rather',
              +        'said',
              +        'say',
              +        'says',
              +        'she',
              +        'should',
              +        'since',
              +        'so',
              +        'some',
              +        'than',
              +        'that',
              +        'the',
              +        'their',
              +        'them',
              +        'then',
              +        'there',
              +        'these',
              +        'they',
              +        'this',
              +        'tis',
              +        'to',
              +        'too',
              +        'twas',
              +        'us',
              +        'wants',
              +        'was',
              +        'we',
              +        'were',
              +        'what',
              +        'when',
              +        'who',
              +        'whom',
              +        'why',
              +        'will',
              +        'would',
              +        'yet',
              +        'you',
              +        'your'
              +        ])
              +
              +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
              +    // would not find anything if searching for "add!", only for the entire qualification
              +    lunr.tokenizer.separator = /[\s\-\.]+/
              +
              +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
              +    lunr.trimmer = function (token) {
              +        return token.update(function (s) {
              +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
              +        })
              +    }
              +
              +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
              +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
              +
              +    var index = lunr(function () {
              +        this.ref('location')
              +        this.field('title')
              +        this.field('text')
              +        documenterSearchIndex['docs'].forEach(function(e) {
              +            this.add(e)
              +        }, this)
              +    })
              +    var store = {}
              +
              +    documenterSearchIndex['docs'].forEach(function(e) {
              +        store[e.location] = {title: e.title, category: e.category}
              +    })
              +
              +    $(function(){
              +        function update_search(querystring) {
              +            tokens = lunr.tokenizer(querystring)
              +            results = index.query(function (q) {
              +                tokens.forEach(function (t) {
              +                    q.term(t.toString(), {
              +                        fields: ["title"],
              +                        boost: 10,
              +                        usePipeline: false,
              +                        editDistance: 2,
              +                        wildcard: lunr.Query.wildcard.NONE
              +                    })
              +                    q.term(t.toString(), {
              +                        fields: ["text"],
              +                        boost: 1,
              +                        usePipeline: true,
              +                        editDistance: 2,
              +                        wildcard: lunr.Query.wildcard.NONE
              +                    })
              +                })
              +            })
              +            $('#search-info').text("Number of results: " + results.length)
              +            $('#search-results').empty()
              +            results.forEach(function(result) {
              +                data = store[result.ref]
              +                link = $('')
              +                link.text(data.title)
              +                link.attr('href', documenterBaseURL+'/'+result.ref)
              +                cat = $('('+data.category+')')
              +                li = $('
            • ').append(link).append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.1.2/index.html b/v0.1.2/index.html new file mode 100644 index 00000000..1229b529 --- /dev/null +++ b/v0.1.2/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl diff --git a/v0.1.2/lib/methods.html b/v0.1.2/lib/methods.html new file mode 100644 index 00000000..5ffd8f61 --- /dev/null +++ b/v0.1.2/lib/methods.html @@ -0,0 +1,2 @@ + +Methods · MathematicalSystems.jl

              Methods

              Methods

              This section describes systems methods implemented in MathematicalSystems.jl.

              States

              statedim(s::AbstractSystem)

              Returns the dimension of the state space of system s.

              source
              stateset(s::AbstractSystem)

              Returns the set of allowed states of system s.

              source

              Inputs

              inputdim(s::AbstractSystem)

              Returns the dimension of the input space of system s.

              source
              inputset(s::AbstractSystem)

              Returns the set of allowed inputs of system s.

              source
              nextinput(input::ConstantInput, n::Int=1)

              Returns the first n elements of this input.

              Input

              • input – a constant input

              • n – (optional, default: 1) the number of desired elements

              Output

              A repeated iterator that generates n equal samples of this input.

              source
              nextinput(input::VaryingInput, n::Int=1)

              Returns the first n elements of this input.

              Input

              • input – varying input

              • n – (optional, default: 1) number of desired elements

              Output

              An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

              source
              diff --git a/v0.1.2/lib/types.html b/v0.1.2/lib/types.html new file mode 100644 index 00000000..e518a8a4 --- /dev/null +++ b/v0.1.2/lib/types.html @@ -0,0 +1,60 @@ + +Types · MathematicalSystems.jl

              Types

              Types

              This section describes systems types implemented in MathematicalSystems.jl.

              Abstract Systems

              AbstractSystem

              Abstract supertype for all system types.

              source
              AbstractContinuousSystem

              Abstract supertype for all continuous system types.

              source
              AbstractDiscreteSystem

              Abstract supertype for all discrete system types.

              source

              Continuous Systems

              ContinuousIdentitySystem <: AbstractContinuousSystem

              Trivial identity continuous-time system of the form

              \[x' = 0.\]
              source
              ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

              Trivial identity continuous-time system with state constraints of the form

              \[x' = 0, x(t) ∈ \mathcal{X}.\]
              source
              LinearContinuousSystem

              Continuous-time linear system of the form

              \[x' = A x.\]

              Fields

              • A – square matrix

              source
              LinearControlContinuousSystem

              Continuous-time linear control system of the form

              \[x' = A x + B u.\]

              Fields

              • A – square matrix

              • B – matrix

              source
              ConstrainedLinearContinuousSystem

              Continuous-time linear system with state constraints of the form

              \[x' = A x, x(t) ∈ \mathcal{X}.\]

              Fields

              • A – square matrix

              • X – state constraints

              source
              ConstrainedLinearControlContinuousSystem

              Continuous-time linear control system with state constraints of the form

              \[x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

              Fields

              • A – square matrix

              • B – matrix

              • X – state constraints

              • U – input constraints

              source
              LinearAlgebraicContinuousSystem

              Continuous-time linear algebraic system of the form

              \[E x' = A x.\]

              Fields

              • A – matrix

              • E – matrix, same size as A

              source
              ConstrainedLinearAlgebraicContinuousSystem

              Continuous-time linear system with state constraints of the form

              \[E x' = A x, x(t) ∈ \mathcal{X}.\]

              Fields

              • A – matrix

              • E – matrix, same size as A

              • X – state constraints

              source

              Discrete Systems

              DiscreteIdentitySystem <: AbstractDiscreteSystem

              Trivial identity discrete-time system of the form

              \[x_{k+1} = x_k.\]
              source
              ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

              Trivial identity discrete-time system with state constraints of the form

              \[x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]
              source
              LinearDiscreteSystem

              Discrete-time linear system of the form

              \[x_{k+1} = A x_k.\]

              Fields

              • A – square matrix

              source
              LinearControlDiscreteSystem

              Discrete-time linear control system of the form

              \[x_{k+1} = A x_k + B u_k.\]

              Fields

              • A – square matrix

              • B – matrix

              source
              ConstrainedLinearDiscreteSystem

              Discrete-time linear system with state constraints of the form

              \[x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

              Fields

              • A – square matrix

              • X – state constraints

              source
              ConstrainedLinearControlDiscreteSystem

              Discrete-time linear control system with state constraints of the form

              \[x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

              Fields

              • A – square matrix

              • B – matrix

              • X – state constraints

              • U – input constraints

              source
              LinearAlgebraicDiscreteSystem

              Discrete-time linear algebraic system of the form

              \[E x_{k+1} = A x_k.\]

              Fields

              • A – matrix

              • E – matrix, same size as A

              source
              ConstrainedLinearAlgebraicDiscreteSystem

              Discrete-time linear system with state constraints of the form

              \[E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

              Fields

              • A – matrix

              • E – matrix, same size as A

              • X – state constraints

              source

              Initial Value Problems

              InitialValueProblem

              Parametric composite type for initial value problems. It is parameterized in the system's type.

              Fields

              • s – system

              • x0 – initial state

              Examples

              The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

              julia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);
              +
              +julia> p.x0
              +2-element Array{Float64,1}:
              + -0.5
              +  0.5
              +julia> statedim(p)
              +  2
              +julia> inputdim(p)
              +  0
              source
              IVP

              IVP is an alias for InitialValueProblem.

              source

              Input Types

              AbstractInput

              Abstract supertype for all input types.

              Notes

              The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

              Iteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

              A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

              source
              ConstantInput{UT} <: AbstractInput

              Type representing an input that remains constant in time.

              Fields

              • U – input set

              Examples

              The constant input holds a single element and its length is infinite. To access the field U, you can use Base's next given a state, or the method nextinput given the number of desired input elements:

              julia> c = ConstantInput(-1//2)
              +MathematicalSystems.ConstantInput{Rational{Int64}}(-1//2)
              +
              +julia> next(c, 1)
              +(-1//2, nothing)
              +
              +julia> next(c, 2)
              +(-1//2, nothing)
              +
              +julia> collect(nextinput(c, 4))
              +4-element Array{Rational{Int64},1}:
              + -1//2
              + -1//2
              + -1//2
              + -1//2

              The elements of this input are rational numbers:

              julia> eltype(c)
              +Rational{Int64}

              To transform a constant input, you can use map as in:

              julia> map(x->2*x, c)
              +MathematicalSystems.ConstantInput{Rational{Int64}}(-1//1)
              source
              VaryingInput{UT} <: AbstractInput

              Type representing an input that may vary with time.

              Fields

              • U – vector of input sets

              Examples

              The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

              julia> v = VaryingInput([-1//2, 1//2])
              +MathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])
              +
              +julia> length(v)
              +2
              +
              +julia> eltype(v)
              +Rational{Int64}

              Base's next method receives the input and an integer state and returns the input element and the next iteration state:

              julia> next(v, 1)
              +(-1//2, 2)
              +
              +julia> next(v, 2)
              +(1//2, 3)

              The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

              julia> typeof(nextinput(v))
              +Base.Iterators.Take{MathematicalSystems.VaryingInput{Rational{Int64}}}
              +
              +julia> collect(nextinput(v, 1))
              +1-element Array{Rational{Int64},1}:
              + -1//2
              +
              +julia> collect(nextinput(v, 2))
              +2-element Array{Rational{Int64},1}:
              + -1//2
              +  1//2

              You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

              julia> collect(v)
              +2-element Array{Rational{Int64},1}:
              + -1//2
              +  1//2
              +
              +julia> [2*vi for vi in v]
              +2-element Array{Rational{Int64},1}:
              + -1//1
              +  1//1

              Since this input type is finite, querying more elements than its length returns the full vector:

              julia> collect(nextinput(v, 4))
              +2-element Array{Rational{Int64},1}:
              + -1//2
              +  1//2

              To transform a varying input, you can use map as in:

              julia> map(x->2*x, v)
              +MathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])
              source
              diff --git a/v0.1.2/search.html b/v0.1.2/search.html new file mode 100644 index 00000000..c2092db7 --- /dev/null +++ b/v0.1.2/search.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

              Search

              Search

              Number of results: loading...

                diff --git a/v0.1.2/search_index.js b/v0.1.2/search_index.js new file mode 100644 index 00000000..ff2b3698 --- /dev/null +++ b/v0.1.2/search_index.js @@ -0,0 +1,419 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "index.html#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "index.html#MathematicalSystems.jl-1", + "page": "Home", + "title": "MathematicalSystems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]MathematicalSystems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "index.html#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled,linear algebraic, etc.Iterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "index.html#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types.html#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types.html#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in MathematicalSystems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form\n\nx = 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form\n\nx = 0x(t) mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form\n\nx = A x\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form\n\nx = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nx = A xx(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form\n\nx = A x + B ux(t) mathcalXu(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form\n\nE x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nE x = A xx(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.DiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form\n\nx_k+1 = x_k\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form\n\nx_k+1 = x_kx_k mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form\n\nx_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form\n\nx_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nx_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form\n\nx_k+1 = A x_k + B u_kx_k mathcalXu_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form\n\nE x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nE x_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.InitialValueProblem", + "page": "Types", + "title": "MathematicalSystems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\njulia> statedim(p)\n 2\njulia> inputdim(p)\n 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.IVP", + "page": "Types", + "title": "MathematicalSystems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractInput", + "page": "Types", + "title": "MathematicalSystems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstantInput", + "page": "Types", + "title": "MathematicalSystems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s next given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nMathematicalSystems.ConstantInput{Rational{Int64}}(-1//2)\n\njulia> next(c, 1)\n(-1//2, nothing)\n\njulia> next(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nMathematicalSystems.ConstantInput{Rational{Int64}}(-1//1)\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.VaryingInput", + "page": "Types", + "title": "MathematicalSystems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nMathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s next method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> next(v, 1)\n(-1//2, 2)\n\njulia> next(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{MathematicalSystems.VaryingInput{Rational{Int64}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nMathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n" +}, + +{ + "location": "lib/types.html#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/methods.html#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods.html#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in MathematicalSystems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.statedim", + "page": "Methods", + "title": "MathematicalSystems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.stateset", + "page": "Methods", + "title": "MathematicalSystems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputdim", + "page": "Methods", + "title": "MathematicalSystems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputset", + "page": "Methods", + "title": "MathematicalSystems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.nextinput", + "page": "Methods", + "title": "MathematicalSystems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "about.html#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about.html#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about.html#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about.html#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about.html#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"MathematicalSystems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about.html#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about.html#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about.html#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to MathematicalSystems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/v0.1.2/siteinfo.js b/v0.1.2/siteinfo.js new file mode 100644 index 00000000..9cdef155 --- /dev/null +++ b/v0.1.2/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.2"; diff --git a/v0.11 b/v0.11 new file mode 120000 index 00000000..8ba78f8a --- /dev/null +++ b/v0.11 @@ -0,0 +1 @@ +v0.11.9 \ No newline at end of file diff --git a/v0.11.0/about/index.html b/v0.11.0/about/index.html new file mode 100644 index 00000000..42b1260a --- /dev/null +++ b/v0.11.0/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                About

                About

                This page contains some general information about this project, and recommendations about contributing.

                Contributing

                If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                Branches and pull requests (PR)

                We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                Unit testing and continuous integration (CI)

                This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                $ julia --color=yes test/runtests.jl

                Alternatively, you can achieve the same from inside the REPL using the following command:

                julia> Pkg.test("MathematicalSystems")

                We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                Contributing to the documentation

                New functions and types should be documented according to our guidelines directly in the source code.

                You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                julia> ?LinearContinuousSystem

                This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                $ julia --color=yes docs/make.jl

                Note that this also runs all doctests which will take some time.

                Related projects

                This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                Below we list more related projects.

                Package nameDescription
                HybridSystems.jlHybrid Systems definitions in Julia.
                LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                ControlToolbox.jlAnalysis and design tools for control systems.
                ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                ControlSystems.jlA Control Systems Toolbox for Julia
                ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                Credits

                These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                diff --git a/v0.11.0/assets/arrow.svg b/v0.11.0/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.0/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.0/assets/documenter.css b/v0.11.0/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.0/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                the is very first thing on the page (i.e. the second element + * in the
                , * after the
                , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                 surrounding the , while
                + * highlight.js applies the .hljs style directly to the  tag.
                + */
                +.hljs {
                +    background-color: transparent;
                +    padding: 0;
                +}
                +
                +@media only screen and (max-width: 768px) {
                +    nav.toc {
                +        position: fixed;
                +        width: 16em;
                +        left: -16em;
                +        -webkit-overflow-scrolling: touch;
                +        -webkit-transition-property: left; /* Safari */
                +        -webkit-transition-duration: 0.3s; /* Safari */
                +        transition-property: left;
                +        transition-duration: 0.3s;
                +        -webkit-transition-timing-function: ease-out; /* Safari */
                +        transition-timing-function: ease-out;
                +        z-index: 2;
                +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                +    }
                +
                +    nav.toc.show {
                +        left: 0;
                +    }
                +
                +    article {
                +        margin-left: 0;
                +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                +        overflow-wrap: break-word;
                +    }
                +
                +    article > header {
                +        position: fixed;
                +        left: 0;
                +        z-index: 1;
                +    }
                +
                +    article > header nav, hr {
                +        display: none;
                +    }
                +
                +    article > header div#topbar {
                +        display: block; /* is mobile */
                +        position: fixed;
                +        width: 100%;
                +        height: 1.5em;
                +        padding-top: 1em;
                +        padding-bottom: 1em;
                +        background-color: #fcfcfc;
                +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                +        top: 0;
                +        -webkit-transition-property: top; /* Safari */
                +        -webkit-transition-duration: 0.3s; /* Safari */
                +        transition-property: top;
                +        transition-duration: 0.3s;
                +    }
                +
                +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                +        top: -4em;
                +        -webkit-transition-property: top; /* Safari */
                +        -webkit-transition-duration: 0.7s; /* Safari */
                +        transition-property: top;
                +        transition-duration: 0.7s;
                +    }
                +
                +    article > header div#topbar span {
                +        width: 80%;
                +        height: 1.5em;
                +        margin-top: -0.1em;
                +        margin-left: 0.9em;
                +        font-size: 1.2em;
                +        overflow: hidden;
                +    }
                +
                +    article > header div#topbar a.fa-bars {
                +        float: right;
                +        padding: 0.6em;
                +        margin-top: -0.6em;
                +        margin-right: 0.3em;
                +        font-size: 1.5em;
                +    }
                +
                +    article > header div#topbar a.fa-bars:visited {
                +        color: #3091d1;
                +    }
                +
                +    article table {
                +        overflow-x: auto;
                +        display: block;
                +    }
                +
                +    article div.MathJax_Display {
                +        overflow: scroll;
                +    }
                +
                +    article span.MathJax {
                +        overflow: hidden;
                +    }
                +}
                +
                +@media only screen and (max-width: 320px) {
                +    body {
                +        font-size: 15px;
                +    }
                +}
                diff --git a/v0.11.0/assets/documenter.js b/v0.11.0/assets/documenter.js
                new file mode 100644
                index 00000000..761ae294
                --- /dev/null
                +++ b/v0.11.0/assets/documenter.js
                @@ -0,0 +1,132 @@
                +/*
                + * Part of Documenter.jl
                + *     https://github.com/JuliaDocs/Documenter.jl
                + *
                + * License: MIT
                + */
                +
                +requirejs.config({
                +    paths: {
                +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                +    },
                +    shim: {
                +        'mathjax' : {
                +            exports: "MathJax"
                +        },
                +        'highlight-julia': ['highlight'],
                +        'highlight-julia-repl': ['highlight'],
                +    }
                +});
                +
                +// Load MathJax
                +require(['mathjax'], function(MathJax) {
                +    MathJax.Hub.Config({
                +      "tex2jax": {
                +        inlineMath: [['$','$'], ['\\(','\\)']],
                +        processEscapes: true
                +      }
                +    });
                +    MathJax.Hub.Config({
                +      config: ["MMLorHTML.js"],
                +      jax: [
                +        "input/TeX",
                +        "output/HTML-CSS",
                +        "output/NativeMML"
                +      ],
                +      extensions: [
                +        "MathMenu.js",
                +        "MathZoom.js",
                +        "TeX/AMSmath.js",
                +        "TeX/AMSsymbols.js",
                +        "TeX/autobold.js",
                +        "TeX/autoload-all.js"
                +      ]
                +    });
                +    MathJax.Hub.Config({
                +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                +    });
                +})
                +
                +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                +    $(document).ready(function() {
                +        hljs.initHighlighting();
                +    })
                +
                +})
                +
                +// update the version selector with info from the siteinfo.js and ../versions.js files
                +require(['jquery'], function($) {
                +    $(document).ready(function() {
                +        var version_selector = $("#version-selector");
                +
                +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                +            var option = $("");
                +            version_selector.append(option);
                +        }
                +
                +        if (typeof DOC_VERSIONS !== 'undefined') {
                +            var existing_versions = $('#version-selector > option');
                +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                +            DOC_VERSIONS.forEach(function(each) {
                +                var version_url = documenterBaseURL + "/../" + each;
                +                var existing_id = $.inArray(each, existing_versions_texts);
                +                // if not already in the version selector, add it as a new option,
                +                // otherwise update the old option with the URL and enable it
                +                if (existing_id == -1) {
                +                    var option = $("");
                +                    version_selector.append(option);
                +                } else {
                +                    var option = existing_versions[existing_id];
                +                    option.value = version_url;
                +                    option.disabled = false;
                +                }
                +            });
                +        }
                +
                +        // only show the version selector if the selector has been populated
                +        if ($('#version-selector > option').length > 0) {
                +            version_selector.css("visibility", "visible");
                +        }
                +
                +        // Scroll the navigation bar to the currently selected menu item
                +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                +    })
                +
                +})
                +
                +// mobile
                +require(['jquery', 'headroom'], function($, Headroom) {
                +    $(document).ready(function() {
                +        var navtoc = $("nav.toc");
                +        $("nav.toc li.current a.toctext").click(function() {
                +            navtoc.toggleClass('show');
                +        });
                +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                +            ev.preventDefault();
                +            navtoc.toggleClass('show');
                +            if (navtoc.hasClass('show')) {
                +                var title = $("article > header div#topbar span").text();
                +                $("nav.toc ul li a:contains('" + title + "')").focus();
                +            }
                +        });
                +        $("article#docs").bind('click', function(ev) {
                +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                +                return;
                +            }
                +            if (navtoc.hasClass('show')) {
                +                navtoc.removeClass('show');
                +            }
                +        });
                +        if ($("article > header div#topbar").css('display') == 'block') {
                +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                +            headroom.init();
                +        }
                +    })
                +})
                diff --git a/v0.11.0/assets/juliareach.css b/v0.11.0/assets/juliareach.css
                new file mode 100644
                index 00000000..64b0d92d
                --- /dev/null
                +++ b/v0.11.0/assets/juliareach.css
                @@ -0,0 +1,583 @@
                +/*
                + * The default CSS style for Documenter.jl generated sites
                + *
                + * Heavily inspired by the Julia Sphinx theme
                + *     https://github.com/JuliaLang/JuliaDoc
                + * which extends the sphinx_rtd_theme
                + *     https://github.com/snide/sphinx_rtd_theme
                + *
                + * Part of Documenter.jl
                + *     https://github.com/JuliaDocs/Documenter.jl
                + *
                + * License: MIT
                + */
                +
                +/* The original CSS is modified such that it right-justifies the text. */
                +
                +/* fonts */
                +body, input {
                +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                +  font-size: 16px;
                +  color: #222;
                +  text-rendering: optimizeLegibility;
                +}
                +
                +pre, code, kbd {
                +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                +  font-size: 0.90em;
                +}
                +
                +pre code {
                +  font-size: 1em;
                +}
                +
                +a {
                +    color: #2980b9;
                +    text-decoration: none;
                +}
                +
                +a:hover {
                +    color: #3091d1;
                +}
                +
                +a:visited {
                +    color: #9b59b6;
                +}
                +
                +body {
                +    line-height: 1.5;
                +}
                +
                +h1 {
                +    font-size: 1.75em;
                +}
                +
                +/* Unless the 

                the is very first thing on the page (i.e. the second element + * in the
                , * after the
                , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                 surrounding the , while
                + * highlight.js applies the .hljs style directly to the  tag.
                + */
                +.hljs {
                +    background-color: transparent;
                +    padding: 0;
                +}
                +
                +@media only screen and (max-width: 768px) {
                +    nav.toc {
                +        position: fixed;
                +        overflow-y: scroll;
                +        width: 16em;
                +        left: -16em;
                +        -webkit-overflow-scrolling: touch;
                +        -webkit-transition-property: left; /* Safari */
                +        -webkit-transition-duration: 0.3s; /* Safari */
                +        transition-property: left;
                +        transition-duration: 0.3s;
                +        -webkit-transition-timing-function: ease-out; /* Safari */
                +        transition-timing-function: ease-out;
                +        z-index: 2;
                +    }
                +
                +    nav.toc.show {
                +        left: 0;
                +    }
                +
                +    article {
                +        margin-left: 0;
                +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                +        overflow-wrap: break-word;
                +    }
                +
                +    article > header {
                +        position: fixed;
                +        left: 0;
                +        z-index: 1;
                +    }
                +
                +    article > header nav, hr {
                +        display: none;
                +    }
                +
                +    article > header div#topbar {
                +        display: block; /* is mobile */
                +        position: fixed;
                +        width: 100%;
                +        height: 1.5em;
                +        padding-top: 1em;
                +        padding-bottom: 1em;
                +        background-color: #fcfcfc;
                +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                +        top: 0;
                +        -webkit-transition-property: top; /* Safari */
                +        -webkit-transition-duration: 0.3s; /* Safari */
                +        transition-property: top;
                +        transition-duration: 0.3s;
                +    }
                +
                +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                +        top: -4em;
                +        -webkit-transition-property: top; /* Safari */
                +        -webkit-transition-duration: 0.7s; /* Safari */
                +        transition-property: top;
                +        transition-duration: 0.7s;
                +    }
                +
                +    article > header div#topbar span {
                +        position: fixed;
                +        width: 80%;
                +        height: 1.5em;
                +        margin-top: -0.1em;
                +        margin-left: 0.9em;
                +        font-size: 1.2em;
                +        overflow: hidden;
                +    }
                +
                +    article > header div#topbar a.fa-bars {
                +        float: right;
                +        padding: 0.6em;
                +        margin-top: -0.6em;
                +        margin-right: 0.3em;
                +        font-size: 1.5em;
                +    }
                +
                +    article > header div#topbar a.fa-bars:visited {
                +        color: #3091d1;
                +    }
                +
                +    article table {
                +        overflow-x: auto;
                +        display: block;
                +    }
                +
                +    article div.MathJax_Display {
                +        overflow: scroll;
                +    }
                +
                +    article span.MathJax {
                +        overflow: hidden;
                +    }
                +}
                +
                +@media only screen and (max-width: 320px) {
                +    body {
                +        font-size: 15px;
                +    }
                +}
                diff --git a/v0.11.0/assets/search.js b/v0.11.0/assets/search.js
                new file mode 100644
                index 00000000..5d32c3aa
                --- /dev/null
                +++ b/v0.11.0/assets/search.js
                @@ -0,0 +1,250 @@
                +/*
                + * Part of Documenter.jl
                + *     https://github.com/JuliaDocs/Documenter.jl
                + *
                + * License: MIT
                + */
                +
                +// parseUri 1.2.2
                +// (c) Steven Levithan 
                +// MIT License
                +function parseUri (str) {
                +	var	o   = parseUri.options,
                +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                +		uri = {},
                +		i   = 14;
                +
                +	while (i--) uri[o.key[i]] = m[i] || "";
                +
                +	uri[o.q.name] = {};
                +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                +		if ($1) uri[o.q.name][$1] = $2;
                +	});
                +
                +	return uri;
                +};
                +parseUri.options = {
                +	strictMode: false,
                +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                +	q:   {
                +		name:   "queryKey",
                +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                +	},
                +	parser: {
                +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                +	}
                +};
                +
                +requirejs.config({
                +    paths: {
                +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                +    }
                +});
                +
                +var currentScript = document.currentScript;
                +
                +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                +    $("#search-form").submit(function(e) {
                +        e.preventDefault()
                +    })
                +
                +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                +    // ideally we'd just filter the original list but it's not available as a variable
                +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                +        'a',
                +        'able',
                +        'about',
                +        'across',
                +        'after',
                +        'almost',
                +        'also',
                +        'am',
                +        'among',
                +        'an',
                +        'and',
                +        'are',
                +        'as',
                +        'at',
                +        'be',
                +        'because',
                +        'been',
                +        'but',
                +        'by',
                +        'can',
                +        'cannot',
                +        'could',
                +        'dear',
                +        'did',
                +        'does',
                +        'either',
                +        'ever',
                +        'every',
                +        'from',
                +        'got',
                +        'had',
                +        'has',
                +        'have',
                +        'he',
                +        'her',
                +        'hers',
                +        'him',
                +        'his',
                +        'how',
                +        'however',
                +        'i',
                +        'if',
                +        'into',
                +        'it',
                +        'its',
                +        'just',
                +        'least',
                +        'like',
                +        'likely',
                +        'may',
                +        'me',
                +        'might',
                +        'most',
                +        'must',
                +        'my',
                +        'neither',
                +        'no',
                +        'nor',
                +        'not',
                +        'of',
                +        'off',
                +        'often',
                +        'on',
                +        'only',
                +        'or',
                +        'other',
                +        'our',
                +        'own',
                +        'rather',
                +        'said',
                +        'say',
                +        'says',
                +        'she',
                +        'should',
                +        'since',
                +        'so',
                +        'some',
                +        'than',
                +        'that',
                +        'the',
                +        'their',
                +        'them',
                +        'then',
                +        'there',
                +        'these',
                +        'they',
                +        'this',
                +        'tis',
                +        'to',
                +        'too',
                +        'twas',
                +        'us',
                +        'wants',
                +        'was',
                +        'we',
                +        'were',
                +        'what',
                +        'when',
                +        'who',
                +        'whom',
                +        'why',
                +        'will',
                +        'would',
                +        'yet',
                +        'you',
                +        'your'
                +        ])
                +
                +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                +    // would not find anything if searching for "add!", only for the entire qualification
                +    lunr.tokenizer.separator = /[\s\-\.]+/
                +
                +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                +    lunr.trimmer = function (token) {
                +        return token.update(function (s) {
                +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                +        })
                +    }
                +
                +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                +
                +    var index = lunr(function () {
                +        this.ref('location')
                +        this.field('title')
                +        this.field('text')
                +        documenterSearchIndex['docs'].forEach(function(e) {
                +            this.add(e)
                +        }, this)
                +    })
                +    var store = {}
                +
                +    documenterSearchIndex['docs'].forEach(function(e) {
                +        store[e.location] = {title: e.title, category: e.category}
                +    })
                +
                +    $(function(){
                +        function update_search(querystring) {
                +            tokens = lunr.tokenizer(querystring)
                +            results = index.query(function (q) {
                +                tokens.forEach(function (t) {
                +                    q.term(t.toString(), {
                +                        fields: ["title"],
                +                        boost: 100,
                +                        usePipeline: false,
                +                        editDistance: 0,
                +                        wildcard: lunr.Query.wildcard.NONE
                +                    })
                +                    q.term(t.toString(), {
                +                        fields: ["title"],
                +                        boost: 10,
                +                        usePipeline: false,
                +                        editDistance: 2,
                +                        wildcard: lunr.Query.wildcard.NONE
                +                    })
                +                    q.term(t.toString(), {
                +                        fields: ["text"],
                +                        boost: 1,
                +                        usePipeline: true,
                +                        editDistance: 0,
                +                        wildcard: lunr.Query.wildcard.NONE
                +                    })
                +                })
                +            })
                +            $('#search-info').text("Number of results: " + results.length)
                +            $('#search-results').empty()
                +            results.forEach(function(result) {
                +                data = store[result.ref]
                +                link = $('')
                +                link.text(data.title)
                +                link.attr('href', documenterBaseURL+'/'+result.ref)
                +                cat = $('('+data.category+')')
                +                li = $('
              • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.0/index.html b/v0.11.0/index.html new file mode 100644 index 00000000..6e085ba2 --- /dev/null +++ b/v0.11.0/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                Home

                MathematicalSystems.jl

                MathematicalSystems is a Julia package for mathematical systems interfaces.

                Features

                • Generic and flexible systems definitions, while being fast and type stable.
                • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                • Iterator interfaces to handle constant or time-varying inputs.

                Library Outline

                diff --git a/v0.11.0/lib/internals/index.html b/v0.11.0/lib/internals/index.html new file mode 100644 index 00000000..27cdd221 --- /dev/null +++ b/v0.11.0/lib/internals/index.html @@ -0,0 +1,42 @@ + +Internals · MathematicalSystems.jl

                Internals

                Internals

                This section describes functions that are internal to the library.

                Expression handling

                _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                Return the system type whose field names match those in fields.

                Input

                • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                • fields – tuple of field names

                Output

                The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                Examples

                julia> using MathematicalSystems: _corresponding_type
                +
                +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                +LinearContinuousSystem
                +
                +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                +ConstrainedLinearControlContinuousSystem
                source
                _capture_dim(expr)

                Return the tuple containing the dimension(s) in expr.

                Input

                • expr – symbolic expression that can be of any of the following forms:

                  • :x or :(x) – state dimension
                  • :(x, u) – state and input dimension
                  • :(x, u, w) – state, input and noise dimensions

                Output

                • The scalar x if expr specifies the state dimension.
                • The vector [x, u] if expr specifies state and input dimension.
                • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                source
                extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                • (:A_user, :A)
                • (:B_user, :B)
                • (:c_user, :c)
                • (:D_user, :D)
                • (:f_user, :f)
                • (:statedim_user :statedim)
                • (:inputdim_user :inputdim)
                • (:noisedim_user :noisedim)

                and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                Input

                • equation – dynamic equation
                • state – state variable
                • input – input variable
                • noise – noise variable
                • dim – dimensionality
                • AT – abstract system type

                Output

                Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                source
                add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                Input

                • summand – expressions
                • state – state variable
                • input – input variable
                • noise – noise variable

                Output

                Multiplication expression or symbol.

                Example

                julia> using MathematicalSystems: add_asterisk
                +
                +julia> add_asterisk(:(A1*x), :x, :u, :w)
                +:(A1 * x)
                +
                +julia> add_asterisk(:(c1), :x, :u, :w)
                +:c1
                +
                +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                +:(A * x1)
                +
                +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                +:(A * wb)
                +
                +julia> add_asterisk(:(A1u), :x, :u, :w)
                +:(A1 * u)
                +
                +julia> add_asterisk(:(A1ub), :x, :u, :w)
                +:A1ub
                source

                Querying expressions

                is_equation(expr)

                Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                Input

                • expr – expression

                Output

                A Bool indicating whether expr is an equation or not.

                source
                extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                Input

                • summands – array of expressions
                • state – state variable
                • input – input variable
                • noise – noise variable

                Output

                Array of tuples of symbols with variable name and field name.

                Example

                julia> using MathematicalSystems: extract_sum
                +
                +julia> extract_sum([:(A1*x)], :x, :u, :w)
                +1-element Array{Tuple{Any,Symbol},1}:
                + (:A1, :A)
                +
                +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                +3-element Array{Tuple{Any,Symbol},1}:
                + (:A1, :A)
                + (:B1, :B)
                + (:c, :c)
                +
                +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                +3-element Array{Tuple{Any,Symbol},1}:
                + (:A1, :A)
                + (:B1, :B)
                + (:B2, :D)

                Notes

                If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                source

                Naming convention for systems' fields

                Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                FieldDescriptionGetter function
                Astate matrixstate_matrix
                Binput matrixinput_matrix
                caffine termaffine_term
                Dnoise matrixnoise_matrix
                Xstate constraintsstateset
                Uinput constraintsinputset
                Wdisturbance setnoiseset
                diff --git a/v0.11.0/lib/methods/index.html b/v0.11.0/lib/methods/index.html new file mode 100644 index 00000000..bbb63aad --- /dev/null +++ b/v0.11.0/lib/methods/index.html @@ -0,0 +1,20 @@ + +Methods · MathematicalSystems.jl

                Methods

                Methods

                This section describes systems methods implemented in MathematicalSystems.jl.

                States

                statedim(s::AbstractSystem)

                Returns the dimension of the state space of system s.

                source
                stateset(s::AbstractSystem)

                Returns the set of allowed states of system s.

                source

                Inputs

                inputdim(s::AbstractSystem)

                Returns the dimension of the input space of system s.

                source
                inputset(s::AbstractSystem)

                Returns the set of allowed inputs of system s.

                source
                nextinput(input::ConstantInput, n::Int=1)

                Returns the first n elements of this input.

                Input

                • input – a constant input
                • n – (optional, default: 1) the number of desired elements

                Output

                A repeated iterator that generates n equal samples of this input.

                source
                nextinput(input::VaryingInput, n::Int=1)

                Returns the first n elements of this input.

                Input

                • input – varying input
                • n – (optional, default: 1) number of desired elements

                Output

                An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                source

                Output

                outputdim(m::AbstractMap)

                Returns the dimension of the output space of the map m.

                source
                outputmap(s::SystemWithOutput)

                Returns the output map of a system with output.

                source

                Traits

                islinear(s::AbstractSystem)

                Specifies if the dynamics of system s is specified by linear equations.

                Notes

                We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                source
                islinear(m::AbstractMap)

                Specifies if the map m is linear or not.

                Notes

                A map is linear if it preserves the operations of scalar multiplication and vector addition.

                source
                isaffine(s::AbstractSystem)

                Specifies if the dynamics of system s is specified by affine equations.

                Notes

                An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                source
                ispolynomial(s::AbstractSystem)

                Specifies if the dynamics of system s is specified by polynomial equations.

                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                source
                isaffine(m::AbstractMap)

                Specifies if the map m is affine or not.

                Notes

                An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                source
                isnoisy(s::AbstractSystem)

                Determines if the dynamics of system s contains a noise term w.

                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                source
                iscontrolled(s::AbstractSystem)

                Determines if the dynamics of system s contains a control input u.

                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                source
                isconstrained(s::AbstractSystem)

                Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                source
                state_matrix(::AbstractSystem)

                Return the state matrix of an affine system.

                Notes

                The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                source
                input_matrix(::AbstractSystem)

                Return the input matrix of a system with linear input.

                Notes

                The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                source
                noise_matrix(::AbstractSystem)

                Return the noise matrix of a system with linear noise.

                Notes

                The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                source
                affine_term(::AbstractSystem)

                Return the affine term in an affine system.

                Notes

                The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                source

                Maps

                apply(m::AbstractMap, args...)

                Apply the rule specified by the map to the given arguments.

                source

                Successor

                successor(system::DiscreteIdentitySystem, x::AbstractVector)

                Return the successor state of a DiscreteIdentitySystem.

                Input

                • systemDiscreteIdentitySystem
                • x – state (it should be any vector type)

                Output

                The same state x.

                source
                successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                +          [check_constraints]=true)

                Return the successor state of a ConstrainedDiscreteIdentitySystem.

                Input

                • systemConstrainedDiscreteIdentitySystem
                • x – state (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state belongs to the state set

                Output

                The same state x.

                source
                successor(system::LinearDiscreteSystem, x::AbstractVector)

                Return the successor state of a LinearDiscreteSystem.

                Input

                • systemLinearDiscreteSystem
                • x – state (it should be any vector type)

                Output

                The result of applying the system to x.

                source
                successor(system::AffineDiscreteSystem, x::AbstractVector)

                Return the successor state of a AffineDiscreteSystem.

                Input

                • systemAffineDiscreteSystem
                • x – state (it should be any vector type)

                Output

                The result of applying the system to x.

                source
                successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                Return the successor state of a LinearControlDiscreteSystem.

                Input

                • systemLinearControlDiscreteSystem
                • x – state (it should be any vector type)
                • u – input (it should be any vector type)

                Output

                The result of applying the system to x, with input u.

                source
                successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                +          [check_constraints]=true)

                Return the successor state of a ConstrainedLinearDiscreteSystem.

                Input

                • systemConstrainedLinearDiscreteSystem
                • x – state (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state belongs to the state set

                Output

                The result of applying the system to x.

                source
                successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                +          [check_constraints])

                Return the successor state of a ConstrainedAffineDiscreteSystem.

                Input

                • systemConstrainedAffineDiscreteSystem
                • x – state (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state belongs to the state set

                Output

                The result of applying the system to x.

                source
                successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                +          u::AbstractVector; [check_constraints]=true)

                Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                Input

                • systemConstrainedLinearControlDiscreteSystem
                • x – state (it should be any vector type)
                • u – input (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                Output

                The result of applying the system to x, with input u.

                source
                successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                +          u::AbstractVector; [check_constraints]=true)

                Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                Input

                • systemConstrainedAffineControlDiscreteSystem
                • x – state (it should be any vector type)
                • u – input (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                Output

                The result of applying the system to x, with input u.

                source
                successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                Return the successor state of a BlackBoxDiscreteSystem.

                Input

                • systemBlackBoxDiscreteSystem
                • x – state (it should be any vector type)

                Output

                The result of applying the system to x.

                source
                successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                +          [check_constraints]=true)

                Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                Input

                • systemConstrainedBlackBoxDiscreteSystem
                • x – state (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state belongs to the state set

                Output

                The result of applying the system to x.

                source
                successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                +          u::AbstractVector; [check_constraints]=true)

                Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                Input

                • systemConstrainedBlackBoxControlDiscreteSystem
                • x – state (it should be any vector type)
                • u – input (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state belongs to the state set

                Output

                The result of applying the system to x, with input u.

                source
                successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                +          w::AbstractVector; [check_constraints]=true)

                Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                Input

                • systemNoisyConstrainedLinearDiscreteSystem
                • x – state (it should be any vector type)
                • w – noise (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state belongs to the state set

                Output

                The result of applying the system to x, with noise w.

                source
                successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                Input

                • systemNoisyConstrainedLinearControlDiscreteSystem
                • x – state (it should be any vector type)
                • u – input (it should be any vector type)
                • w – noise (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                Output

                The result of applying the system to x, with input u and noise w.

                source
                successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                +          u::AbstractVector; [check_constraints]=true)

                Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                Input

                • systemNoisyConstrainedAffineControlDiscreteSystem
                • x – state (it should be any vector type)
                • u – input (it should be any vector type)
                • w – noise (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                Output

                The result of applying the system to x, with input u and noise w.

                source
                successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                Input

                • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                • x – state (it should be any vector type)
                • u – input (it should be any vector type)
                • w – noise (it should be any vector type)
                • check_constraints – (optional, default: true) check if the state belongs to the state set

                Output

                The result of applying the system to x, with input u and noise w.

                source

                Discretization

                discretize(system::AbstractContinuousSystem, ΔT::Real,
                +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                +           constructor=_default_complementary_constructor(system))

                Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                Input

                • system – an affine continuous system
                • ΔT – sampling time
                • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                Output

                Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                source

                Internal Methods

                _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                Input

                • `` – discretization algorithm, used for dispatch
                • ΔT – sampling time
                • A – state matrix
                • B – input matrix
                • c – vector
                • D – noise matrix

                Output

                Returns a vector containing the discretized input arguments A, B, c and D.

                Notes

                See discretize for more details.

                source
                _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                Input

                • A – state matrix
                • ΔT – sampling time
                • algorithm – (optional, default: :exact) discretization algorithm

                Output

                Returns a vector containing the discretized input argument A.

                Notes

                See discretize for more details.

                source
                _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                +            A::AbstractMatrix, B::AbstractMatrix)

                Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                Input

                • algorithm – discretization algorithm
                • ΔT – sampling time
                • A – state matrix
                • B – input or noise matrix

                Output

                Returns a vector containing the discretized input arguments A and B.

                Notes

                This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                See discretize for more details.

                source
                _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                +            A::AbstractMatrix,c::AbstractVector)

                Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                Input

                • algorithm – discretization algorithm
                • ΔT – sampling time
                • A – state matrix
                • c – vector

                Output

                Returns a vector containing the discretized input arguments A and c.

                Notes

                See discretize for more details.

                source
                _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                Input

                • algorithm – discretization algorithm
                • ΔT – sampling time
                • A – state matrix
                • B – input matrix
                • c – vector

                Output

                Returns a vector containing the discretized input arguments A, B and c.

                Notes

                See discretize for more details.

                source
                _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                Input

                • algorithm – discretization algorithm
                • ΔT – sampling time
                • A – state matrix
                • B – input matrix
                • D – noise matrix

                Output

                Returns a vector containing the discretized input arguments A, B and D.

                Notes

                See discretize for more details.

                source
                typename(system::AbstractSystem)

                Returns the base type of system without parameter information.

                Input

                • systemAbstractSystem

                Output

                The base type of system.

                source
                _complementary_type(system_type::Type{<:AbstractSystem})

                Return the complementary type of a system type system_type.

                Input

                • system_type – type of AbstractSystem

                Ouput

                Return complementary type of system_type.

                Notes

                There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                To get the complementary type of system type, use _complementary_type(typename(system)).

                source
                diff --git a/v0.11.0/lib/types/index.html b/v0.11.0/lib/types/index.html new file mode 100644 index 00000000..2d8a146d --- /dev/null +++ b/v0.11.0/lib/types/index.html @@ -0,0 +1,115 @@ + +Types · MathematicalSystems.jl

                Types

                Types

                This section describes systems types implemented in MathematicalSystems.jl.

                Abstract Systems

                AbstractSystem

                Abstract supertype for all system types.

                source
                AbstractContinuousSystem

                Abstract supertype for all continuous system types.

                source
                AbstractDiscreteSystem

                Abstract supertype for all discrete system types.

                source

                Continuous Systems

                ContinuousIdentitySystem <: AbstractContinuousSystem

                Trivial identity continuous-time system of the form:

                \[ x' = 0.\]

                Fields

                • statedim – number of state variables
                source
                ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                Trivial identity continuous-time system with state constraints of the form:

                \[ x' = 0, x(t) ∈ \mathcal{X}.\]

                Fields

                • statedim – number of state variables
                • X – state constraints
                source
                LinearContinuousSystem

                Continuous-time linear system of the form:

                \[ x' = A x.\]

                Fields

                • A – state matrix
                source
                AffineContinuousSystem

                Continuous-time affine system of the form:

                \[ x' = A x + c.\]

                Fields

                • A – state matrix
                • c – affine term
                source
                LinearControlContinuousSystem

                Continuous-time linear control system of the form:

                \[ x' = A x + B u.\]

                Fields

                • A – state matrix
                • B – input matrix
                source
                ConstrainedLinearContinuousSystem

                Continuous-time linear system with state constraints of the form:

                \[ x' = A x, x(t) ∈ \mathcal{X}.\]

                Fields

                • A – state matrix
                • X – state constraints
                source
                ConstrainedAffineContinuousSystem

                Continuous-time affine system with state constraints of the form:

                \[ x' = A x + c, x(t) ∈ \mathcal{X}.\]

                Fields

                • A – state matrix
                • c – affine term
                • X – state constraints
                source
                ConstrainedAffineControlContinuousSystem

                Continuous-time affine control system with state constraints of the form:

                \[ x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

                and $c$ a vector.

                Fields

                • A – state matrix
                • B – input matrix
                • c – affine term
                • X – state constraints
                • U – input constraints
                source
                ConstrainedLinearControlContinuousSystem

                Continuous-time linear control system with state constraints of the form:

                \[ x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                Fields

                • A – state matrix
                • B – input matrix
                • X – state constraints
                • U – input constraints
                source
                LinearAlgebraicContinuousSystem

                Continuous-time linear algebraic system of the form:

                \[ E x' = A x.\]

                Fields

                • A – state matrix
                • E – matrix, same size as A
                source
                ConstrainedLinearAlgebraicContinuousSystem

                Continuous-time linear system with state constraints of the form:

                \[ E x' = A x, x(t) ∈ \mathcal{X}.\]

                Fields

                • A – state matrix
                • E – matrix, same size as A
                • X – state constraints
                source
                PolynomialContinuousSystem

                Continuous-time polynomial system of the form:

                \[ x' = p(x).\]

                Fields

                • p – polynomial vector field
                • statedim – number of state variables
                source
                ConstrainedPolynomialContinuousSystem

                Continuous-time polynomial system with state constraints:

                \[ x' = p(x), x(t) ∈ \mathcal{X}\]

                Fields

                • p – polynomial vector field
                • X – constraint set
                • statedim – number of state variables
                source
                BlackBoxContinuousSystem <: AbstractContinuousSystem

                Continuous-time system defined by a right-hand side of the form:

                \[ x' = f(x(t))\]

                Fields

                • f – function that holds the right-hand side
                • statedim – number of state variables
                source
                ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                Continuous-time system defined by a right-hand side with state constraints of the form:

                \[ x' = f(x(t)), x(t) ∈ \mathcal{X}.\]

                Fields

                • f – function that holds the right-hand side
                • statedim – number of state variables
                • X – state constraints
                source
                ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                Continuous-time control system defined by a right-hand side with state and input constraints of the form:

                \[ x' = f(x(t), u(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}.\]

                Fields

                • f – function that holds the right-hand side
                • statedim – number of state variables
                • inputdim – number of input variables
                • X – state constraints
                • U – input constraints
                source
                NoisyConstrainedLinearContinuousSystem

                Continuous-time linear system with additive disturbance and state constraints of the form:

                \[ x' = A x + D w, x(t) ∈ \mathcal{X}, w(t) ∈ \mathcal{W}.\]

                Fields

                • A – state matrix
                • D – noise matrix
                • X – state constraints
                • W – disturbance set
                source
                NoisyConstrainedLinearControlContinuousSystem

                Continuous-time affine control system with state constraints of the form:

                \[ x' = A x + B u + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                and $c$ a vector.

                Fields

                • A – state matrix
                • B – input matrix
                • D – noise matrix
                • X – state constraints
                • U – input constraints
                • W – disturbance set
                source
                NoisyConstrainedAffineControlContinuousSystem

                Continuous-time affine control system with state constraints of the form:

                \[ x' = A x + B u + c + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                and $c$ a vector.

                Fields

                • A – state matrix
                • B – input matrix
                • c – affine term
                • D – noise matrix
                • X – state constraints
                • U – input constraints
                • W – disturbance set
                source
                NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                Continuous-time control system defined by a right-hand side with state constraints of the form:

                \[ x' = f(x(t), u(t), w(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W}.\]

                Fields

                • f – function that holds the right-hand side
                • statedim – number of state variables
                • inputdim – number of input variables
                • X – state constraints
                • U – input constraints
                • W – disturbance set
                source

                Discrete Systems

                DiscreteIdentitySystem <: AbstractDiscreteSystem

                Trivial identity discrete-time system of the form:

                \[ x_{k+1} = x_k.\]

                Fields

                • statedim – number of state variables
                source
                ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                Trivial identity discrete-time system with state constraints of the form:

                \[ x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]

                Fields

                • statedim – number of state variables
                • X – state constraints
                source
                LinearDiscreteSystem

                Discrete-time linear system of the form:

                \[ x_{k+1} = A x_k.\]

                Fields

                • A – state matrix
                source
                AffineDiscreteSystem

                Discrete-time affine system of the form:

                \[ x_{k+1} = A x_k + c.\]

                Fields

                • A – state matrix
                • c – affine term
                source
                LinearControlDiscreteSystem

                Discrete-time linear control system of the form:

                \[ x_{k+1} = A x_k + B u_k.\]

                Fields

                • A – state matrix
                • B – input matrix
                source
                ConstrainedLinearDiscreteSystem

                Discrete-time linear system with state constraints of the form:

                \[ x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                Fields

                • A – state matrix
                • X – state constraints
                source
                ConstrainedAffineDiscreteSystem

                Discrete-time affine system with state constraints of the form:

                \[ x_{k+1} = A x_k + c, x_k ∈ \mathcal{X} \text{ for all } k.\]

                Fields

                • A – state matrix
                • c – affine term
                • X – state constraints
                source
                ConstrainedLinearControlDiscreteSystem

                Discrete-time linear control system with state constraints of the form:

                \[ x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                Fields

                • A – state matrix
                • B – input matrix
                • X – state constraints
                • U – input constraints
                source
                ConstrainedAffineControlDiscreteSystem

                Continuous-time affine control system with state constraints of the form:

                \[ x_{k+1} = A x_k + B u_k + c, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k,\]

                and $c$ a vector.

                Fields

                • A – state matrix
                • B – input matrix
                • c – affine term
                • X – state constraints
                • U – input constraints
                source
                LinearAlgebraicDiscreteSystem

                Discrete-time linear algebraic system of the form:

                \[ E x_{k+1} = A x_k.\]

                Fields

                • A – state matrix
                • E – matrix, same size as A
                source
                ConstrainedLinearAlgebraicDiscreteSystem

                Discrete-time linear system with state constraints of the form:

                \[ E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                Fields

                • A – state matrix
                • E – matrix, same size as A
                • X – state constraints
                source
                PolynomialDiscreteSystem

                Discrete-time polynomial system of the form:

                \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                Fields

                • p – polynomial vector field
                • statedim – number of state variables
                source
                ConstrainedPolynomialDiscreteSystem

                Discrete-time polynomial system with state constraints:

                \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                Fields

                • p – polynomial
                • X – constraint set
                • statedim – number of state variables
                source
                BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                Discrete-time system defined by a right-hand side of the form:

                \[ x_{k+1} = f(x_k)\]

                Fields

                • f – function that holds the right-hand side
                • statedim – number of state variables
                source
                ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                Discrete-time system defined by a right-hand side with state constraints of the form:

                \[ x_{k+1} = f(x_k), x_k ∈ \mathcal{X}.\]

                Fields

                • f – function that holds the right-hand side
                • statedim – number of state variables
                • X – state constraints
                source
                ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                Discrete-time control system defined by a right-hand side with state and input constraints of the form:

                \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}.\]

                Fields

                • f – function that holds the right-hand side
                • statedim – number of state variables
                • inputdim – number of input variables
                • X – state constraints
                • U – input constraints
                source
                NoisyConstrainedLinearDiscreteSystem

                Discrete-time linear system with additive disturbance and state constraints of the form:

                \[ x_{k+1} = A x_k + D w_k, x_k ∈ \mathcal{X}, w(t) ∈ \mathcal{W} .\]

                Fields

                • A – state matrix
                • D – noise matrix
                • X – state constraints
                • W – disturbance set
                source
                NoisyConstrainedLinearControlDiscreteSystem

                Continuous-time affine control system with state constraints of the form:

                \[ x_{k+1} = A x_k + B u_k + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                and $c$ a vector.

                Fields

                • A – state matrix
                • B – input matrix
                • D – noise matrix
                • X – state constraints
                • U – input constraints
                • W – disturbance set
                source
                NoisyConstrainedAffineControlDiscreteSystem

                Continuous-time affine control system with state constraints of the form:

                \[ x_{k+1} = A x_k + B u_k + c + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                and $c$ a vector.

                Fields

                • A – state matrix
                • B – input matrix
                • c – affine term
                • D – noise matrix
                • X – state constraints
                • U – input constraints
                • W – disturbance set
                source
                NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                Discrete-time control system defined by a right-hand side with state constraints of the form:

                \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W}.\]

                Fields

                • f – function that holds the right-hand side
                • statedim – number of state variables
                • inputdim – number of input variables
                • X – state constraints
                • U – input constraints
                • W – disturbance set
                source

                Discretization Algorithms

                AbstractDiscretizationAlgorithm

                Abstract supertype for all discretization algorithms.

                Note

                For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                are required.

                source
                ExactDiscretization <: AbstractDiscretizationAlgorithm

                Exact discretization algorithm for affine systems.

                Algorithm

                This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                The algorithm described above is a well known result from the literature [1].

                [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                source
                EulerDiscretization <: AbstractDiscretizationAlgorithm

                Euler discretization algorithm for affine systems.

                Algorithm

                This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                The algorithm described above is a well known result from the literature [1].

                [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                source

                System macro

                system(expr...)

                Return an instance of the system type corresponding to the given expressions.

                Input

                • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                Output

                A system that best matches the given expressions.

                Notes

                Terms. The expression expr contains one or more of the following sub-expressions:

                • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                • set constraints, e.g. x ∈ X
                • input constraints, e.g. u ∈ U
                • dimensionality, e.g. dim: (2,1) or dim = 1
                • specification of the input variable, e.g. input: u or input = u
                • specification of the noise variable, e,g, noise: w or noise = w

                The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                Exceptions. The following exceptions and particular cases apply:

                • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                Examples

                Let us first create a continuous linear system using this macro:

                julia> A = [1. 0; 0 1.];
                +
                +julia> @system(x' = A*x)
                +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                A discrete system is defined by using :

                julia> @system(x⁺ = A*x)
                +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                julia> using LazySets
                +
                +julia> B = Matrix([1. 0.5]');
                +
                +julia> c = [1., 1.5];
                +
                +julia> X = BallInf(zeros(2), 10.);
                +
                +julia> U = BallInf(zeros(1), 2.);
                +
                +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64},BallInf{Float64}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64}([0.0, 0.0], 10.0), BallInf{Float64}([0.0], 2.0))

                For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                julia> f(x, u) = x + u;
                +
                +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64},BallInf{Float64}}(f, 2, 2, BallInf{Float64}([0.0, 0.0], 10.0), BallInf{Float64}([0.0], 2.0))
                source

                Identity operator

                IdentityMultiple{T} < AbstractMatrix{T} where T

                A scalar multiple of the identity matrix of given order and numeric type.

                Fields

                • M – uniform scaling operator of type T
                • n – size of the identity matrix

                Notes

                This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                Examples

                The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                julia> using MathematicalSystems: IdentityMultiple
                +
                +julia> I2 = I(2)
                +IdentityMultiple{Float64} of value 1.0 and order 2
                +
                +julia> I2 + I2
                +IdentityMultiple{Float64} of value 2.0 and order 2
                +
                +julia> 4*I2
                +IdentityMultiple{Float64} of value 4.0 and order 2

                The numeric type (default Float64) can be passed as a second argument:

                julia> I2r = I(2, Rational{Int})
                +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                +
                +julia> I2r + I2r
                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                +
                +julia> 4*I2r
                +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                julia> I2 = I(2.0, 2)
                +IdentityMultiple{Float64} of value 2.0 and order 2
                +
                +julia> I2r = I(2//1, 2)
                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                Or use the constructor passing the UniformScaling (I):

                julia> I2 = IdentityMultiple(2.0*I, 2)
                +IdentityMultiple{Float64} of value 2.0 and order 2
                +
                +julia> I2r = IdentityMultiple(2//1*I, 2)
                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                source

                Initial Value Problems

                InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                Fields

                • s – system
                • x0 – initial state

                Examples

                The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                +
                +julia> x₀ = [-1/2, 1/2];
                +
                +julia> p = InitialValueProblem(s, x₀);
                +
                +julia> initial_state(p) # same as p.x0
                +2-element Array{Float64,1}:
                + -0.5
                +  0.5
                +
                +julia> statedim(p)
                +2
                +
                +julia> inputdim(p)
                +0
                source
                IVP

                IVP is an alias for InitialValueProblem.

                source
                initial_state(ivp::InitialValueProblem)

                Return the initial state of an initial-value problem.

                Input

                • ivp – initial-value problem

                Output

                The initial state of an initial-value problem.

                source

                Input Types

                AbstractInput

                Abstract supertype for all input types.

                Notes

                The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                source
                ConstantInput{UT} <: AbstractInput

                Type representing an input that remains constant in time.

                Fields

                • U – input set

                Examples

                The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                julia> c = ConstantInput(-1//2)
                +ConstantInput{Rational{Int64}}(-1//2)
                +
                +julia> iterate(c, 1)
                +(-1//2, nothing)
                +
                +julia> iterate(c, 2)
                +(-1//2, nothing)
                +
                +julia> collect(nextinput(c, 4))
                +4-element Array{Rational{Int64},1}:
                + -1//2
                + -1//2
                + -1//2
                + -1//2

                The elements of this input are rational numbers:

                julia> eltype(c)
                +Rational{Int64}

                To transform a constant input, you can use map as in:

                julia> map(x->2*x, c)
                +ConstantInput{Rational{Int64}}(-1//1)
                source
                VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                Type representing an input that may vary with time.

                Fields

                • U – vector of input sets

                Examples

                The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                julia> v = VaryingInput([-1//2, 1//2])
                +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                +
                +julia> length(v)
                +2
                +
                +julia> eltype(v)
                +Rational{Int64}

                Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                julia> iterate(v, 1)
                +(-1//2, 2)
                +
                +julia> iterate(v, 2)
                +(1//2, 3)

                The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                julia> typeof(nextinput(v))
                +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                +
                +julia> collect(nextinput(v, 1))
                +1-element Array{Rational{Int64},1}:
                + -1//2
                +
                +julia> collect(nextinput(v, 2))
                +2-element Array{Rational{Int64},1}:
                + -1//2
                +  1//2

                You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                julia> collect(v)
                +2-element Array{Rational{Int64},1}:
                + -1//2
                +  1//2
                +
                +julia> [2*vi for vi in v]
                +2-element Array{Rational{Int64},1}:
                + -1//1
                +  1//1

                Since this input type is finite, querying more elements than its length returns the full vector:

                julia> collect(nextinput(v, 4))
                +2-element Array{Rational{Int64},1}:
                + -1//2
                +  1//2

                To transform a varying input, you can use map as in:

                julia> map(x->2*x, v)
                +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                source

                Maps

                AbstractMap

                Abstract supertype for all map types.

                source
                IdentityMap

                An identity map,

                \[ x ↦ x.\]

                Fields

                • dim – dimension
                source
                ConstrainedIdentityMap

                An identity map with state constraints of the form:

                \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                Fields

                • dim – dimension
                • X – state constraints
                source
                LinearMap

                A linear map,

                \[ x ↦ Ax\]

                Fields

                • A – matrix
                source
                ConstrainedLinearMap

                A linear map with state constraints of the form:

                \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                Fields

                • A – matrix
                • X – state constraints
                source
                AffineMap

                An affine map,

                \[ x ↦ Ax + c.\]

                Fields

                • A – matrix
                • c – vector
                source
                ConstrainedAffineMap

                An affine map with state constraints of the form:

                \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                Fields

                • A – matrix
                • c – vector
                • X – state constraints
                source
                LinearControlMap

                A linear control map,

                \[ (x, u) ↦ Ax + Bu.\]

                Fields

                • A – matrix
                • B – matrix
                source
                ConstrainedLinearControlMap

                A linear control map with state and input constraints,

                \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                Fields

                • A – matrix
                • B – matrix
                • X – state constraints
                • U – input constraints
                source
                AffineControlMap

                An affine control map,

                \[ (x, u) ↦ Ax + Bu + c.\]

                Fields

                • A – matrix
                • B – matrix
                • c – vector
                source
                ConstrainedAffineControlMap

                An affine control map with state and input constraints,

                \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                Fields

                • A – matrix
                • B – matrix
                • c – vector
                • X – state constraints
                • U – input constraints
                source
                ResetMap

                A reset map,

                \[ x ↦ R(x),\]

                such that a subset of the variables is given a specified value, and the rest are unchanged.

                Fields

                • dim – dimension
                • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                source
                ConstrainedResetMap

                A reset map with state constraints of the form:

                \[ x ↦ R(x), x ∈ \mathcal{X},\]

                such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                Fields

                • dim – dimension
                • X – state constraints
                • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                source

                Macros

                map(ex, args)

                Return an instance of the map type corresponding to the given expression.

                Input

                • ex – an expression defining the map, in the form of an anonymous function
                • args – additional optional arguments

                Output

                A map that best matches the given expression.

                Examples

                Let us first create a linear map using this macro:

                julia> @map x -> [1 0; 0 0]*x
                +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                We can create an affine system as well:

                julia> @map x -> [1 0; 0 0]*x + [2, 0]
                +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                julia> @map(x -> x, dim=5)
                +IdentityMap(5)

                An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                julia> @map x -> I(5)*x
                +IdentityMap(5)
                source

                Systems with output

                SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                Fields

                • s – system of type ST
                • outputmap – output map of type MT
                source
                LinearTimeInvariantSystem(A, B, C, D)

                A linear time-invariant system with of the form

                \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                Input

                • A – matrix
                • B – matrix
                • C – matrix
                • D – matrix

                Output

                A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                source
                LinearTimeInvariantSystem(A, B, C, D, X, U)

                A linear time-invariant system with state and input constraints of the form

                \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                Input

                • A – matrix
                • B – matrix
                • C – matrix
                • D – matrix
                • X – state constraints
                • U – input constraints

                Output

                A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                source
                LTISystem

                LTISystem is an alias for LinearTimeInvariantSystem.

                source
                diff --git a/v0.11.0/search/index.html b/v0.11.0/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.0/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                Search

                Search

                Number of results: loading...

                  diff --git a/v0.11.0/search_index.js b/v0.11.0/search_index.js new file mode 100644 index 00000000..5a7cb723 --- /dev/null +++ b/v0.11.0/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:A1, :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:A1, :A)\n (:B1, :B)\n (:c, :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:A1, :A)\n (:B1, :B)\n (:B2, :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x = 0\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form:\n\n x = 0 x(t) mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x = A x\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x = A x + c\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x = A x + B u\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n x = A x x(t) mathcalX\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form:\n\n x = A x + c x(t) mathcalX\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form:\n\n x = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x = A x\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n E x = A x x(t) mathcalX\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x = p(x)\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints:\n\n x = p(x) x(t) mathcalX\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x = f(x(t))\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t)) x(t) mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state and input constraints of the form:\n\n x = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and state constraints of the form:\n\n x = A x + D w x(t) mathcalX w(t) mathcalW\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t) u(t) w(t)) x(t) mathcalX u(t) mathcalU w(t) mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form:\n\n x_k+1 = x_k x_k mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with state constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX text for all k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c x_k mathcalX u_k mathcalU text for all k\n\nand c a vector.\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n E x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k)\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state and input constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and state constraints of the form:\n\n x_k+1 = A x_k + D w_k x_k mathcalX w(t) mathcalW \n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU w_k mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64},BallInf{Float64}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64}([0.0, 0.0], 10.0), BallInf{Float64}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64},BallInf{Float64}}(f, 2, 2, BallInf{Float64}([0.0, 0.0], 10.0), BallInf{Float64}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s3} where #s3<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.0/siteinfo.js b/v0.11.0/siteinfo.js new file mode 100644 index 00000000..4a96494e --- /dev/null +++ b/v0.11.0/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.0"; diff --git a/v0.11.1/about/index.html b/v0.11.1/about/index.html new file mode 100644 index 00000000..53f1576e --- /dev/null +++ b/v0.11.1/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                  About

                  About

                  This page contains some general information about this project, and recommendations about contributing.

                  Contributing

                  If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                  Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                  Branches and pull requests (PR)

                  We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                  Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                  Unit testing and continuous integration (CI)

                  This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                  When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                  $ julia --color=yes test/runtests.jl

                  Alternatively, you can achieve the same from inside the REPL using the following command:

                  julia> Pkg.test("MathematicalSystems")

                  We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                  Contributing to the documentation

                  New functions and types should be documented according to our guidelines directly in the source code.

                  You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                  julia> ?LinearContinuousSystem

                  This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                  To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                  $ julia --color=yes docs/make.jl

                  Note that this also runs all doctests which will take some time.

                  Related projects

                  This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                  Below we list more related projects.

                  Package nameDescription
                  HybridSystems.jlHybrid Systems definitions in Julia.
                  LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                  ControlToolbox.jlAnalysis and design tools for control systems.
                  ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                  DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                  ControlSystems.jlA Control Systems Toolbox for Julia
                  ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                  Credits

                  These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                  diff --git a/v0.11.1/assets/arrow.svg b/v0.11.1/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.1/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.1/assets/documenter.css b/v0.11.1/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.1/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                  the is very first thing on the page (i.e. the second element + * in the
                  , * after the
                  , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                   surrounding the , while
                  + * highlight.js applies the .hljs style directly to the  tag.
                  + */
                  +.hljs {
                  +    background-color: transparent;
                  +    padding: 0;
                  +}
                  +
                  +@media only screen and (max-width: 768px) {
                  +    nav.toc {
                  +        position: fixed;
                  +        width: 16em;
                  +        left: -16em;
                  +        -webkit-overflow-scrolling: touch;
                  +        -webkit-transition-property: left; /* Safari */
                  +        -webkit-transition-duration: 0.3s; /* Safari */
                  +        transition-property: left;
                  +        transition-duration: 0.3s;
                  +        -webkit-transition-timing-function: ease-out; /* Safari */
                  +        transition-timing-function: ease-out;
                  +        z-index: 2;
                  +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                  +    }
                  +
                  +    nav.toc.show {
                  +        left: 0;
                  +    }
                  +
                  +    article {
                  +        margin-left: 0;
                  +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                  +        overflow-wrap: break-word;
                  +    }
                  +
                  +    article > header {
                  +        position: fixed;
                  +        left: 0;
                  +        z-index: 1;
                  +    }
                  +
                  +    article > header nav, hr {
                  +        display: none;
                  +    }
                  +
                  +    article > header div#topbar {
                  +        display: block; /* is mobile */
                  +        position: fixed;
                  +        width: 100%;
                  +        height: 1.5em;
                  +        padding-top: 1em;
                  +        padding-bottom: 1em;
                  +        background-color: #fcfcfc;
                  +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                  +        top: 0;
                  +        -webkit-transition-property: top; /* Safari */
                  +        -webkit-transition-duration: 0.3s; /* Safari */
                  +        transition-property: top;
                  +        transition-duration: 0.3s;
                  +    }
                  +
                  +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                  +        top: -4em;
                  +        -webkit-transition-property: top; /* Safari */
                  +        -webkit-transition-duration: 0.7s; /* Safari */
                  +        transition-property: top;
                  +        transition-duration: 0.7s;
                  +    }
                  +
                  +    article > header div#topbar span {
                  +        width: 80%;
                  +        height: 1.5em;
                  +        margin-top: -0.1em;
                  +        margin-left: 0.9em;
                  +        font-size: 1.2em;
                  +        overflow: hidden;
                  +    }
                  +
                  +    article > header div#topbar a.fa-bars {
                  +        float: right;
                  +        padding: 0.6em;
                  +        margin-top: -0.6em;
                  +        margin-right: 0.3em;
                  +        font-size: 1.5em;
                  +    }
                  +
                  +    article > header div#topbar a.fa-bars:visited {
                  +        color: #3091d1;
                  +    }
                  +
                  +    article table {
                  +        overflow-x: auto;
                  +        display: block;
                  +    }
                  +
                  +    article div.MathJax_Display {
                  +        overflow: scroll;
                  +    }
                  +
                  +    article span.MathJax {
                  +        overflow: hidden;
                  +    }
                  +}
                  +
                  +@media only screen and (max-width: 320px) {
                  +    body {
                  +        font-size: 15px;
                  +    }
                  +}
                  diff --git a/v0.11.1/assets/documenter.js b/v0.11.1/assets/documenter.js
                  new file mode 100644
                  index 00000000..761ae294
                  --- /dev/null
                  +++ b/v0.11.1/assets/documenter.js
                  @@ -0,0 +1,132 @@
                  +/*
                  + * Part of Documenter.jl
                  + *     https://github.com/JuliaDocs/Documenter.jl
                  + *
                  + * License: MIT
                  + */
                  +
                  +requirejs.config({
                  +    paths: {
                  +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                  +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                  +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                  +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                  +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                  +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                  +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                  +    },
                  +    shim: {
                  +        'mathjax' : {
                  +            exports: "MathJax"
                  +        },
                  +        'highlight-julia': ['highlight'],
                  +        'highlight-julia-repl': ['highlight'],
                  +    }
                  +});
                  +
                  +// Load MathJax
                  +require(['mathjax'], function(MathJax) {
                  +    MathJax.Hub.Config({
                  +      "tex2jax": {
                  +        inlineMath: [['$','$'], ['\\(','\\)']],
                  +        processEscapes: true
                  +      }
                  +    });
                  +    MathJax.Hub.Config({
                  +      config: ["MMLorHTML.js"],
                  +      jax: [
                  +        "input/TeX",
                  +        "output/HTML-CSS",
                  +        "output/NativeMML"
                  +      ],
                  +      extensions: [
                  +        "MathMenu.js",
                  +        "MathZoom.js",
                  +        "TeX/AMSmath.js",
                  +        "TeX/AMSsymbols.js",
                  +        "TeX/autobold.js",
                  +        "TeX/autoload-all.js"
                  +      ]
                  +    });
                  +    MathJax.Hub.Config({
                  +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                  +    });
                  +})
                  +
                  +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                  +    $(document).ready(function() {
                  +        hljs.initHighlighting();
                  +    })
                  +
                  +})
                  +
                  +// update the version selector with info from the siteinfo.js and ../versions.js files
                  +require(['jquery'], function($) {
                  +    $(document).ready(function() {
                  +        var version_selector = $("#version-selector");
                  +
                  +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                  +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                  +            var option = $("");
                  +            version_selector.append(option);
                  +        }
                  +
                  +        if (typeof DOC_VERSIONS !== 'undefined') {
                  +            var existing_versions = $('#version-selector > option');
                  +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                  +            DOC_VERSIONS.forEach(function(each) {
                  +                var version_url = documenterBaseURL + "/../" + each;
                  +                var existing_id = $.inArray(each, existing_versions_texts);
                  +                // if not already in the version selector, add it as a new option,
                  +                // otherwise update the old option with the URL and enable it
                  +                if (existing_id == -1) {
                  +                    var option = $("");
                  +                    version_selector.append(option);
                  +                } else {
                  +                    var option = existing_versions[existing_id];
                  +                    option.value = version_url;
                  +                    option.disabled = false;
                  +                }
                  +            });
                  +        }
                  +
                  +        // only show the version selector if the selector has been populated
                  +        if ($('#version-selector > option').length > 0) {
                  +            version_selector.css("visibility", "visible");
                  +        }
                  +
                  +        // Scroll the navigation bar to the currently selected menu item
                  +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                  +    })
                  +
                  +})
                  +
                  +// mobile
                  +require(['jquery', 'headroom'], function($, Headroom) {
                  +    $(document).ready(function() {
                  +        var navtoc = $("nav.toc");
                  +        $("nav.toc li.current a.toctext").click(function() {
                  +            navtoc.toggleClass('show');
                  +        });
                  +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                  +            ev.preventDefault();
                  +            navtoc.toggleClass('show');
                  +            if (navtoc.hasClass('show')) {
                  +                var title = $("article > header div#topbar span").text();
                  +                $("nav.toc ul li a:contains('" + title + "')").focus();
                  +            }
                  +        });
                  +        $("article#docs").bind('click', function(ev) {
                  +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                  +                return;
                  +            }
                  +            if (navtoc.hasClass('show')) {
                  +                navtoc.removeClass('show');
                  +            }
                  +        });
                  +        if ($("article > header div#topbar").css('display') == 'block') {
                  +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                  +            headroom.init();
                  +        }
                  +    })
                  +})
                  diff --git a/v0.11.1/assets/juliareach.css b/v0.11.1/assets/juliareach.css
                  new file mode 100644
                  index 00000000..64b0d92d
                  --- /dev/null
                  +++ b/v0.11.1/assets/juliareach.css
                  @@ -0,0 +1,583 @@
                  +/*
                  + * The default CSS style for Documenter.jl generated sites
                  + *
                  + * Heavily inspired by the Julia Sphinx theme
                  + *     https://github.com/JuliaLang/JuliaDoc
                  + * which extends the sphinx_rtd_theme
                  + *     https://github.com/snide/sphinx_rtd_theme
                  + *
                  + * Part of Documenter.jl
                  + *     https://github.com/JuliaDocs/Documenter.jl
                  + *
                  + * License: MIT
                  + */
                  +
                  +/* The original CSS is modified such that it right-justifies the text. */
                  +
                  +/* fonts */
                  +body, input {
                  +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                  +  font-size: 16px;
                  +  color: #222;
                  +  text-rendering: optimizeLegibility;
                  +}
                  +
                  +pre, code, kbd {
                  +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                  +  font-size: 0.90em;
                  +}
                  +
                  +pre code {
                  +  font-size: 1em;
                  +}
                  +
                  +a {
                  +    color: #2980b9;
                  +    text-decoration: none;
                  +}
                  +
                  +a:hover {
                  +    color: #3091d1;
                  +}
                  +
                  +a:visited {
                  +    color: #9b59b6;
                  +}
                  +
                  +body {
                  +    line-height: 1.5;
                  +}
                  +
                  +h1 {
                  +    font-size: 1.75em;
                  +}
                  +
                  +/* Unless the 

                  the is very first thing on the page (i.e. the second element + * in the
                  , * after the
                  , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                   surrounding the , while
                  + * highlight.js applies the .hljs style directly to the  tag.
                  + */
                  +.hljs {
                  +    background-color: transparent;
                  +    padding: 0;
                  +}
                  +
                  +@media only screen and (max-width: 768px) {
                  +    nav.toc {
                  +        position: fixed;
                  +        overflow-y: scroll;
                  +        width: 16em;
                  +        left: -16em;
                  +        -webkit-overflow-scrolling: touch;
                  +        -webkit-transition-property: left; /* Safari */
                  +        -webkit-transition-duration: 0.3s; /* Safari */
                  +        transition-property: left;
                  +        transition-duration: 0.3s;
                  +        -webkit-transition-timing-function: ease-out; /* Safari */
                  +        transition-timing-function: ease-out;
                  +        z-index: 2;
                  +    }
                  +
                  +    nav.toc.show {
                  +        left: 0;
                  +    }
                  +
                  +    article {
                  +        margin-left: 0;
                  +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                  +        overflow-wrap: break-word;
                  +    }
                  +
                  +    article > header {
                  +        position: fixed;
                  +        left: 0;
                  +        z-index: 1;
                  +    }
                  +
                  +    article > header nav, hr {
                  +        display: none;
                  +    }
                  +
                  +    article > header div#topbar {
                  +        display: block; /* is mobile */
                  +        position: fixed;
                  +        width: 100%;
                  +        height: 1.5em;
                  +        padding-top: 1em;
                  +        padding-bottom: 1em;
                  +        background-color: #fcfcfc;
                  +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                  +        top: 0;
                  +        -webkit-transition-property: top; /* Safari */
                  +        -webkit-transition-duration: 0.3s; /* Safari */
                  +        transition-property: top;
                  +        transition-duration: 0.3s;
                  +    }
                  +
                  +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                  +        top: -4em;
                  +        -webkit-transition-property: top; /* Safari */
                  +        -webkit-transition-duration: 0.7s; /* Safari */
                  +        transition-property: top;
                  +        transition-duration: 0.7s;
                  +    }
                  +
                  +    article > header div#topbar span {
                  +        position: fixed;
                  +        width: 80%;
                  +        height: 1.5em;
                  +        margin-top: -0.1em;
                  +        margin-left: 0.9em;
                  +        font-size: 1.2em;
                  +        overflow: hidden;
                  +    }
                  +
                  +    article > header div#topbar a.fa-bars {
                  +        float: right;
                  +        padding: 0.6em;
                  +        margin-top: -0.6em;
                  +        margin-right: 0.3em;
                  +        font-size: 1.5em;
                  +    }
                  +
                  +    article > header div#topbar a.fa-bars:visited {
                  +        color: #3091d1;
                  +    }
                  +
                  +    article table {
                  +        overflow-x: auto;
                  +        display: block;
                  +    }
                  +
                  +    article div.MathJax_Display {
                  +        overflow: scroll;
                  +    }
                  +
                  +    article span.MathJax {
                  +        overflow: hidden;
                  +    }
                  +}
                  +
                  +@media only screen and (max-width: 320px) {
                  +    body {
                  +        font-size: 15px;
                  +    }
                  +}
                  diff --git a/v0.11.1/assets/search.js b/v0.11.1/assets/search.js
                  new file mode 100644
                  index 00000000..5d32c3aa
                  --- /dev/null
                  +++ b/v0.11.1/assets/search.js
                  @@ -0,0 +1,250 @@
                  +/*
                  + * Part of Documenter.jl
                  + *     https://github.com/JuliaDocs/Documenter.jl
                  + *
                  + * License: MIT
                  + */
                  +
                  +// parseUri 1.2.2
                  +// (c) Steven Levithan 
                  +// MIT License
                  +function parseUri (str) {
                  +	var	o   = parseUri.options,
                  +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                  +		uri = {},
                  +		i   = 14;
                  +
                  +	while (i--) uri[o.key[i]] = m[i] || "";
                  +
                  +	uri[o.q.name] = {};
                  +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                  +		if ($1) uri[o.q.name][$1] = $2;
                  +	});
                  +
                  +	return uri;
                  +};
                  +parseUri.options = {
                  +	strictMode: false,
                  +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                  +	q:   {
                  +		name:   "queryKey",
                  +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                  +	},
                  +	parser: {
                  +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                  +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                  +	}
                  +};
                  +
                  +requirejs.config({
                  +    paths: {
                  +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                  +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                  +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                  +    }
                  +});
                  +
                  +var currentScript = document.currentScript;
                  +
                  +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                  +    $("#search-form").submit(function(e) {
                  +        e.preventDefault()
                  +    })
                  +
                  +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                  +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                  +    // ideally we'd just filter the original list but it's not available as a variable
                  +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                  +        'a',
                  +        'able',
                  +        'about',
                  +        'across',
                  +        'after',
                  +        'almost',
                  +        'also',
                  +        'am',
                  +        'among',
                  +        'an',
                  +        'and',
                  +        'are',
                  +        'as',
                  +        'at',
                  +        'be',
                  +        'because',
                  +        'been',
                  +        'but',
                  +        'by',
                  +        'can',
                  +        'cannot',
                  +        'could',
                  +        'dear',
                  +        'did',
                  +        'does',
                  +        'either',
                  +        'ever',
                  +        'every',
                  +        'from',
                  +        'got',
                  +        'had',
                  +        'has',
                  +        'have',
                  +        'he',
                  +        'her',
                  +        'hers',
                  +        'him',
                  +        'his',
                  +        'how',
                  +        'however',
                  +        'i',
                  +        'if',
                  +        'into',
                  +        'it',
                  +        'its',
                  +        'just',
                  +        'least',
                  +        'like',
                  +        'likely',
                  +        'may',
                  +        'me',
                  +        'might',
                  +        'most',
                  +        'must',
                  +        'my',
                  +        'neither',
                  +        'no',
                  +        'nor',
                  +        'not',
                  +        'of',
                  +        'off',
                  +        'often',
                  +        'on',
                  +        'only',
                  +        'or',
                  +        'other',
                  +        'our',
                  +        'own',
                  +        'rather',
                  +        'said',
                  +        'say',
                  +        'says',
                  +        'she',
                  +        'should',
                  +        'since',
                  +        'so',
                  +        'some',
                  +        'than',
                  +        'that',
                  +        'the',
                  +        'their',
                  +        'them',
                  +        'then',
                  +        'there',
                  +        'these',
                  +        'they',
                  +        'this',
                  +        'tis',
                  +        'to',
                  +        'too',
                  +        'twas',
                  +        'us',
                  +        'wants',
                  +        'was',
                  +        'we',
                  +        'were',
                  +        'what',
                  +        'when',
                  +        'who',
                  +        'whom',
                  +        'why',
                  +        'will',
                  +        'would',
                  +        'yet',
                  +        'you',
                  +        'your'
                  +        ])
                  +
                  +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                  +    // would not find anything if searching for "add!", only for the entire qualification
                  +    lunr.tokenizer.separator = /[\s\-\.]+/
                  +
                  +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                  +    lunr.trimmer = function (token) {
                  +        return token.update(function (s) {
                  +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                  +        })
                  +    }
                  +
                  +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                  +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                  +
                  +    var index = lunr(function () {
                  +        this.ref('location')
                  +        this.field('title')
                  +        this.field('text')
                  +        documenterSearchIndex['docs'].forEach(function(e) {
                  +            this.add(e)
                  +        }, this)
                  +    })
                  +    var store = {}
                  +
                  +    documenterSearchIndex['docs'].forEach(function(e) {
                  +        store[e.location] = {title: e.title, category: e.category}
                  +    })
                  +
                  +    $(function(){
                  +        function update_search(querystring) {
                  +            tokens = lunr.tokenizer(querystring)
                  +            results = index.query(function (q) {
                  +                tokens.forEach(function (t) {
                  +                    q.term(t.toString(), {
                  +                        fields: ["title"],
                  +                        boost: 100,
                  +                        usePipeline: false,
                  +                        editDistance: 0,
                  +                        wildcard: lunr.Query.wildcard.NONE
                  +                    })
                  +                    q.term(t.toString(), {
                  +                        fields: ["title"],
                  +                        boost: 10,
                  +                        usePipeline: false,
                  +                        editDistance: 2,
                  +                        wildcard: lunr.Query.wildcard.NONE
                  +                    })
                  +                    q.term(t.toString(), {
                  +                        fields: ["text"],
                  +                        boost: 1,
                  +                        usePipeline: true,
                  +                        editDistance: 0,
                  +                        wildcard: lunr.Query.wildcard.NONE
                  +                    })
                  +                })
                  +            })
                  +            $('#search-info').text("Number of results: " + results.length)
                  +            $('#search-results').empty()
                  +            results.forEach(function(result) {
                  +                data = store[result.ref]
                  +                link = $('')
                  +                link.text(data.title)
                  +                link.attr('href', documenterBaseURL+'/'+result.ref)
                  +                cat = $('('+data.category+')')
                  +                li = $('
                • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.1/index.html b/v0.11.1/index.html new file mode 100644 index 00000000..8623032d --- /dev/null +++ b/v0.11.1/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                  Home

                  MathematicalSystems.jl

                  MathematicalSystems is a Julia package for mathematical systems interfaces.

                  Features

                  • Generic and flexible systems definitions, while being fast and type stable.
                  • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                  • Iterator interfaces to handle constant or time-varying inputs.

                  Library Outline

                  diff --git a/v0.11.1/lib/internals/index.html b/v0.11.1/lib/internals/index.html new file mode 100644 index 00000000..ee7d8de0 --- /dev/null +++ b/v0.11.1/lib/internals/index.html @@ -0,0 +1,55 @@ + +Internals · MathematicalSystems.jl

                  Internals

                  Internals

                  This section describes functions that are internal to the library.

                  Expression handling

                  _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                  Return the system type whose field names match those in fields.

                  Input

                  • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                  • fields – tuple of field names

                  Output

                  The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                  Examples

                  julia> using MathematicalSystems: _corresponding_type
                  +
                  +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                  +LinearContinuousSystem
                  +
                  +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                  +ConstrainedLinearControlContinuousSystem
                  source
                  _capture_dim(expr)

                  Return the tuple containing the dimension(s) in expr.

                  Input

                  • expr – symbolic expression that can be of any of the following forms:

                    • :x or :(x) – state dimension
                    • :(x, u) – state and input dimension
                    • :(x, u, w) – state, input and noise dimensions

                  Output

                  • The scalar x if expr specifies the state dimension.
                  • The vector [x, u] if expr specifies state and input dimension.
                  • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                  source
                  extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                  Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                  For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                  • (:A_user, :A)
                  • (:B_user, :B)
                  • (:c_user, :c)
                  • (:D_user, :D)
                  • (:f_user, :f)
                  • (:statedim_user :statedim)
                  • (:inputdim_user :inputdim)
                  • (:noisedim_user :noisedim)

                  and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                  Input

                  • equation – dynamic equation
                  • state – state variable
                  • input – input variable
                  • noise – noise variable
                  • dim – dimensionality
                  • AT – abstract system type

                  Output

                  Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                  source
                  add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                  Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                  Input

                  • summand – expressions
                  • state – state variable
                  • input – input variable
                  • noise – noise variable

                  Output

                  Multiplication expression or symbol.

                  Example

                  julia> using MathematicalSystems: add_asterisk
                  +
                  +julia> add_asterisk(:(A1*x), :x, :u, :w)
                  +:(A1 * x)
                  +
                  +julia> add_asterisk(:(c1), :x, :u, :w)
                  +:c1
                  +
                  +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                  +:(A * x1)
                  +
                  +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                  +:(A * wb)
                  +
                  +julia> add_asterisk(:(A1u), :x, :u, :w)
                  +:(A1 * u)
                  +
                  +julia> add_asterisk(:(A1ub), :x, :u, :w)
                  +:A1ub
                  source
                  Base.sortFunction.
                  sort(parameters::Vector, order::Tuple)

                  Filter and sort the vector parameters according to order.

                  Input

                  • parameters – vector of tuples
                  • order – tuple of symbols

                  Output

                  A new vector of tuples corresponding to parameters filtered and sorted according to order.

                  Examples

                  julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                  +
                  +julia> sort(parameters, (:X, :U, :W))
                  +3-element Array{Tuple{Any,Symbol},1}:
                  + (:X1, :X)
                  + (:U1, :U)
                  + (:W1, :W)
                  +
                  +julia>  parameters = [(:const, :c), (:A, :A)];
                  +
                  +julia> sort(parameters, (:A, :B, :c, :D))
                  +2-element Array{Tuple{Any,Symbol},1}:
                  + (:A, :A)
                  + (:const, :c)

                  Notes

                  parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                  If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                  source

                  Querying expressions

                  is_equation(expr)

                  Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                  Input

                  • expr – expression

                  Output

                  A Bool indicating whether expr is an equation or not.

                  source
                  extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                  Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                  Input

                  • summands – array of expressions
                  • state – state variable
                  • input – input variable
                  • noise – noise variable

                  Output

                  Array of tuples of symbols with variable name and field name.

                  Example

                  julia> using MathematicalSystems: extract_sum
                  +
                  +julia> extract_sum([:(A1*x)], :x, :u, :w)
                  +1-element Array{Tuple{Any,Symbol},1}:
                  + (:(hcat(A1)), :A)
                  +
                  +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                  +3-element Array{Tuple{Any,Symbol},1}:
                  + (:(hcat(A1)), :A)
                  + (:(hcat(B1)), :B)
                  + (:(vcat(c)), :c)
                  +
                  +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                  +3-element Array{Tuple{Any,Symbol},1}:
                  + (:(hcat(A1)), :A)
                  + (:(hcat(B1)), :B)
                  + (:(hcat(B2)), :D)

                  Notes

                  If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                  If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                  Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                  source

                  Naming convention for systems' fields

                  Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                  FieldDescriptionGetter function
                  Astate matrixstate_matrix
                  Binput matrixinput_matrix
                  caffine termaffine_term
                  Dnoise matrixnoise_matrix
                  Xstate constraintsstateset
                  Uinput constraintsinputset
                  Wdisturbance setnoiseset
                  diff --git a/v0.11.1/lib/methods/index.html b/v0.11.1/lib/methods/index.html new file mode 100644 index 00000000..118d3716 --- /dev/null +++ b/v0.11.1/lib/methods/index.html @@ -0,0 +1,20 @@ + +Methods · MathematicalSystems.jl

                  Methods

                  Methods

                  This section describes systems methods implemented in MathematicalSystems.jl.

                  States

                  statedim(s::AbstractSystem)

                  Returns the dimension of the state space of system s.

                  source
                  stateset(s::AbstractSystem)

                  Returns the set of allowed states of system s.

                  source

                  Inputs

                  inputdim(s::AbstractSystem)

                  Returns the dimension of the input space of system s.

                  source
                  inputset(s::AbstractSystem)

                  Returns the set of allowed inputs of system s.

                  source
                  nextinput(input::ConstantInput, n::Int=1)

                  Returns the first n elements of this input.

                  Input

                  • input – a constant input
                  • n – (optional, default: 1) the number of desired elements

                  Output

                  A repeated iterator that generates n equal samples of this input.

                  source
                  nextinput(input::VaryingInput, n::Int=1)

                  Returns the first n elements of this input.

                  Input

                  • input – varying input
                  • n – (optional, default: 1) number of desired elements

                  Output

                  An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                  source

                  Output

                  outputdim(m::AbstractMap)

                  Returns the dimension of the output space of the map m.

                  source
                  outputmap(s::SystemWithOutput)

                  Returns the output map of a system with output.

                  source

                  Traits

                  islinear(s::AbstractSystem)

                  Specifies if the dynamics of system s is specified by linear equations.

                  Notes

                  We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                  [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                  source
                  islinear(m::AbstractMap)

                  Specifies if the map m is linear or not.

                  Notes

                  A map is linear if it preserves the operations of scalar multiplication and vector addition.

                  source
                  isaffine(s::AbstractSystem)

                  Specifies if the dynamics of system s is specified by affine equations.

                  Notes

                  An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                  source
                  ispolynomial(s::AbstractSystem)

                  Specifies if the dynamics of system s is specified by polynomial equations.

                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                  source
                  isaffine(m::AbstractMap)

                  Specifies if the map m is affine or not.

                  Notes

                  An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                  source
                  isnoisy(s::AbstractSystem)

                  Determines if the dynamics of system s contains a noise term w.

                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                  source
                  iscontrolled(s::AbstractSystem)

                  Determines if the dynamics of system s contains a control input u.

                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                  source
                  isconstrained(s::AbstractSystem)

                  Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                  source
                  state_matrix(::AbstractSystem)

                  Return the state matrix of an affine system.

                  Notes

                  The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                  source
                  input_matrix(::AbstractSystem)

                  Return the input matrix of a system with linear input.

                  Notes

                  The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                  source
                  noise_matrix(::AbstractSystem)

                  Return the noise matrix of a system with linear noise.

                  Notes

                  The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                  source
                  affine_term(::AbstractSystem)

                  Return the affine term in an affine system.

                  Notes

                  The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                  source

                  Maps

                  apply(m::AbstractMap, args...)

                  Apply the rule specified by the map to the given arguments.

                  source

                  Successor

                  successor(system::DiscreteIdentitySystem, x::AbstractVector)

                  Return the successor state of a DiscreteIdentitySystem.

                  Input

                  • systemDiscreteIdentitySystem
                  • x – state (it should be any vector type)

                  Output

                  The same state x.

                  source
                  successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                  +          [check_constraints]=true)

                  Return the successor state of a ConstrainedDiscreteIdentitySystem.

                  Input

                  • systemConstrainedDiscreteIdentitySystem
                  • x – state (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                  Output

                  The same state x.

                  source
                  successor(system::LinearDiscreteSystem, x::AbstractVector)

                  Return the successor state of a LinearDiscreteSystem.

                  Input

                  • systemLinearDiscreteSystem
                  • x – state (it should be any vector type)

                  Output

                  The result of applying the system to x.

                  source
                  successor(system::AffineDiscreteSystem, x::AbstractVector)

                  Return the successor state of a AffineDiscreteSystem.

                  Input

                  • systemAffineDiscreteSystem
                  • x – state (it should be any vector type)

                  Output

                  The result of applying the system to x.

                  source
                  successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                  Return the successor state of a LinearControlDiscreteSystem.

                  Input

                  • systemLinearControlDiscreteSystem
                  • x – state (it should be any vector type)
                  • u – input (it should be any vector type)

                  Output

                  The result of applying the system to x, with input u.

                  source
                  successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                  +          [check_constraints]=true)

                  Return the successor state of a ConstrainedLinearDiscreteSystem.

                  Input

                  • systemConstrainedLinearDiscreteSystem
                  • x – state (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                  Output

                  The result of applying the system to x.

                  source
                  successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                  +          [check_constraints])

                  Return the successor state of a ConstrainedAffineDiscreteSystem.

                  Input

                  • systemConstrainedAffineDiscreteSystem
                  • x – state (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                  Output

                  The result of applying the system to x.

                  source
                  successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                  +          u::AbstractVector; [check_constraints]=true)

                  Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                  Input

                  • systemConstrainedLinearControlDiscreteSystem
                  • x – state (it should be any vector type)
                  • u – input (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                  Output

                  The result of applying the system to x, with input u.

                  source
                  successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                  +          u::AbstractVector; [check_constraints]=true)

                  Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                  Input

                  • systemConstrainedAffineControlDiscreteSystem
                  • x – state (it should be any vector type)
                  • u – input (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                  Output

                  The result of applying the system to x, with input u.

                  source
                  successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                  Return the successor state of a BlackBoxDiscreteSystem.

                  Input

                  • systemBlackBoxDiscreteSystem
                  • x – state (it should be any vector type)

                  Output

                  The result of applying the system to x.

                  source
                  successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                  +          [check_constraints]=true)

                  Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                  Input

                  • systemConstrainedBlackBoxDiscreteSystem
                  • x – state (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                  Output

                  The result of applying the system to x.

                  source
                  successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                  +          u::AbstractVector; [check_constraints]=true)

                  Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                  Input

                  • systemConstrainedBlackBoxControlDiscreteSystem
                  • x – state (it should be any vector type)
                  • u – input (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                  Output

                  The result of applying the system to x, with input u.

                  source
                  successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                  +          w::AbstractVector; [check_constraints]=true)

                  Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                  Input

                  • systemNoisyConstrainedLinearDiscreteSystem
                  • x – state (it should be any vector type)
                  • w – noise (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                  Output

                  The result of applying the system to x, with noise w.

                  source
                  successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                  +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                  Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                  Input

                  • systemNoisyConstrainedLinearControlDiscreteSystem
                  • x – state (it should be any vector type)
                  • u – input (it should be any vector type)
                  • w – noise (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                  Output

                  The result of applying the system to x, with input u and noise w.

                  source
                  successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                  +          u::AbstractVector; [check_constraints]=true)

                  Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                  Input

                  • systemNoisyConstrainedAffineControlDiscreteSystem
                  • x – state (it should be any vector type)
                  • u – input (it should be any vector type)
                  • w – noise (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                  Output

                  The result of applying the system to x, with input u and noise w.

                  source
                  successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                  +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                  Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                  Input

                  • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                  • x – state (it should be any vector type)
                  • u – input (it should be any vector type)
                  • w – noise (it should be any vector type)
                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                  Output

                  The result of applying the system to x, with input u and noise w.

                  source

                  Discretization

                  discretize(system::AbstractContinuousSystem, ΔT::Real,
                  +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                  +           constructor=_default_complementary_constructor(system))

                  Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                  Input

                  • system – an affine continuous system
                  • ΔT – sampling time
                  • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                  • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                  Output

                  Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                  source

                  Internal Methods

                  _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                  +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                  Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                  Input

                  • `` – discretization algorithm, used for dispatch
                  • ΔT – sampling time
                  • A – state matrix
                  • B – input matrix
                  • c – vector
                  • D – noise matrix

                  Output

                  Returns a vector containing the discretized input arguments A, B, c and D.

                  Notes

                  See discretize for more details.

                  source
                  _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                  Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                  Input

                  • A – state matrix
                  • ΔT – sampling time
                  • algorithm – (optional, default: :exact) discretization algorithm

                  Output

                  Returns a vector containing the discretized input argument A.

                  Notes

                  See discretize for more details.

                  source
                  _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                  +            A::AbstractMatrix, B::AbstractMatrix)

                  Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                  Input

                  • algorithm – discretization algorithm
                  • ΔT – sampling time
                  • A – state matrix
                  • B – input or noise matrix

                  Output

                  Returns a vector containing the discretized input arguments A and B.

                  Notes

                  This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                  See discretize for more details.

                  source
                  _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                  +            A::AbstractMatrix,c::AbstractVector)

                  Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                  Input

                  • algorithm – discretization algorithm
                  • ΔT – sampling time
                  • A – state matrix
                  • c – vector

                  Output

                  Returns a vector containing the discretized input arguments A and c.

                  Notes

                  See discretize for more details.

                  source
                  _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                  +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                  Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                  Input

                  • algorithm – discretization algorithm
                  • ΔT – sampling time
                  • A – state matrix
                  • B – input matrix
                  • c – vector

                  Output

                  Returns a vector containing the discretized input arguments A, B and c.

                  Notes

                  See discretize for more details.

                  source
                  _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                  +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                  Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                  Input

                  • algorithm – discretization algorithm
                  • ΔT – sampling time
                  • A – state matrix
                  • B – input matrix
                  • D – noise matrix

                  Output

                  Returns a vector containing the discretized input arguments A, B and D.

                  Notes

                  See discretize for more details.

                  source
                  typename(system::AbstractSystem)

                  Returns the base type of system without parameter information.

                  Input

                  • systemAbstractSystem

                  Output

                  The base type of system.

                  source
                  _complementary_type(system_type::Type{<:AbstractSystem})

                  Return the complementary type of a system type system_type.

                  Input

                  • system_type – type of AbstractSystem

                  Ouput

                  Return complementary type of system_type.

                  Notes

                  There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                  To get the complementary type of system type, use _complementary_type(typename(system)).

                  source
                  diff --git a/v0.11.1/lib/types/index.html b/v0.11.1/lib/types/index.html new file mode 100644 index 00000000..212659ca --- /dev/null +++ b/v0.11.1/lib/types/index.html @@ -0,0 +1,122 @@ + +Types · MathematicalSystems.jl

                  Types

                  Types

                  This section describes systems types implemented in MathematicalSystems.jl.

                  Abstract Systems

                  AbstractSystem

                  Abstract supertype for all system types.

                  source
                  AbstractContinuousSystem

                  Abstract supertype for all continuous system types.

                  source
                  AbstractDiscreteSystem

                  Abstract supertype for all discrete system types.

                  source

                  Continuous Systems

                  ContinuousIdentitySystem <: AbstractContinuousSystem

                  Trivial identity continuous-time system of the form:

                  \[ x(t)' = 0 \; \forall t.\]

                  Fields

                  • statedim – number of state variables
                  source
                  ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                  Trivial identity continuous-time system with domain constraints of the form:

                  \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                  Fields

                  • statedim – number of state variables
                  • X – state constraints
                  source
                  LinearContinuousSystem

                  Continuous-time linear system of the form:

                  \[ x(t)' = A x(t) \; \forall t.\]

                  Fields

                  • A – state matrix
                  source
                  AffineContinuousSystem

                  Continuous-time affine system of the form:

                  \[ x(t)' = A x(t) + c \; \forall t.\]

                  Fields

                  • A – state matrix
                  • c – affine term
                  source
                  LinearControlContinuousSystem

                  Continuous-time linear control system of the form:

                  \[ x(t)' = A x(t) + B u(t) \; \forall t.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  source
                  ConstrainedLinearContinuousSystem

                  Continuous-time linear system with domain constraints of the form:

                  \[ x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                  Fields

                  • A – state matrix
                  • X – state constraints
                  source
                  ConstrainedAffineContinuousSystem

                  Continuous-time affine system with domain constraints of the form:

                  \[ x(t)' = A x(t) + c, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                  Fields

                  • A – state matrix
                  • c – affine term
                  • X – state constraints
                  source
                  ConstrainedAffineControlContinuousSystem

                  Continuous-time affine control system with domain constraints of the form:

                  \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • c – affine term
                  • X – state constraints
                  • U – input constraints
                  source
                  ConstrainedLinearControlContinuousSystem

                  Continuous-time linear control system with domain constraints of the form:

                  \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • X – state constraints
                  • U – input constraints
                  source
                  LinearAlgebraicContinuousSystem

                  Continuous-time linear algebraic system of the form:

                  \[ E x(t)' = A x(t) \; \forall t.\]

                  Fields

                  • A – state matrix
                  • E – matrix, same size as A
                  source
                  ConstrainedLinearAlgebraicContinuousSystem

                  Continuous-time linear system with domain constraints of the form:

                  \[ E x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                  Fields

                  • A – state matrix
                  • E – matrix, same size as A
                  • X – state constraints
                  source
                  PolynomialContinuousSystem

                  Continuous-time polynomial system of the form:

                  \[ x(t)' = p(x(t)) \; \forall t.\]

                  Fields

                  • p – polynomial vector field
                  • statedim – number of state variables
                  source
                  ConstrainedPolynomialContinuousSystem

                  Continuous-time polynomial system with domain constraints:

                  \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                  Fields

                  • p – polynomial vector field
                  • X – constraint set
                  • statedim – number of state variables
                  source
                  BlackBoxContinuousSystem <: AbstractContinuousSystem

                  Continuous-time system defined by a right-hand side of the form:

                  \[ x(t)' = f(x(t)) \; \forall t.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  source
                  ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                  Continuous-time system defined by a right-hand side with domain constraints of the form:

                  \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • X – state constraints
                  source
                  BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                  Continuous-time control system defined by a right-hand side of the form:

                  \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • inputdim – number of input variables
                  source
                  ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                  Continuous-time control system defined by a right-hand side with domain constraints of the form:

                  \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • inputdim – number of input variables
                  • X – state constraints
                  • U – input constraints
                  source
                  NoisyLinearContinuousSystem

                  Continuous-time linear system with additive disturbance of the form:

                  \[ x(t)' = A x(t) + D w(t) \; \forall t.\]

                  Fields

                  • A – state matrix
                  • D – noise matrix
                  source
                  NoisyConstrainedLinearContinuousSystem

                  Continuous-time linear system with additive disturbance and domain constraints of the form:

                  \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                  Fields

                  • A – state matrix
                  • D – noise matrix
                  • X – state constraints
                  • W – disturbance set
                  source
                  NoisyLinearControlContinuousSystem

                  Continuous-time linear control system with additive disturbance of the form:

                  \[ x(t)' = A x(t) + B u(t) + D w(t) \; \forall t.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • D – noise matrix
                  source
                  NoisyConstrainedLinearControlContinuousSystem

                  Continuous-time linear control system with additive disturbance and domain constraints of the form:

                  \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • D – noise matrix
                  • X – state constraints
                  • U – input constraints
                  • W – disturbance set
                  source
                  NoisyAffineControlContinuousSystem

                  Continuous-time affine control system with additive disturbance of the form:

                  \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • c – affine term
                  • D – noise matrix
                  source
                  NoisyConstrainedAffineControlContinuousSystem

                  Continuous-time affine control system with additive disturbance and domain constraints of the form:

                  \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • c – affine term
                  • D – noise matrix
                  • X – state constraints
                  • U – input constraints
                  • W – disturbance set
                  source
                  NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                  Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                  \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • inputdim – number of input variables
                  • noisedim – number of noise variables
                  source
                  NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                  Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                  \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • inputdim – number of input variables
                  • noisedim – number of noise variables
                  • X – state constraints
                  • U – input constraints
                  • W – disturbance set
                  source

                  Discrete Systems

                  DiscreteIdentitySystem <: AbstractDiscreteSystem

                  Trivial identity discrete-time system of the form:

                  \[ x_{k+1} = x_k \; \forall k.\]

                  Fields

                  • statedim – number of state variables
                  source
                  ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                  Trivial identity discrete-time system with domain constraints of the form:

                  \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                  Fields

                  • statedim – number of state variables
                  • X – state constraints
                  source
                  LinearDiscreteSystem

                  Discrete-time linear system of the form:

                  \[ x_{k+1} = A x_k \; \forall k.\]

                  Fields

                  • A – state matrix
                  source
                  AffineDiscreteSystem

                  Discrete-time affine system of the form:

                  \[ x_{k+1} = A x_k + c \; \forall k.\]

                  Fields

                  • A – state matrix
                  • c – affine term
                  source
                  LinearControlDiscreteSystem

                  Discrete-time linear control system of the form:

                  \[ x_{k+1} = A x_k + B u_k \; \forall k.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  source
                  ConstrainedLinearDiscreteSystem

                  Discrete-time linear system with domain constraints of the form:

                  \[ x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                  Fields

                  • A – state matrix
                  • X – state constraints
                  source
                  ConstrainedAffineDiscreteSystem

                  Discrete-time affine system with domain constraints of the form:

                  \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                  Fields

                  • A – state matrix
                  • c – affine term
                  • X – state constraints
                  source
                  ConstrainedLinearControlDiscreteSystem

                  Discrete-time linear control system with domain constraints of the form:

                  \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • X – state constraints
                  • U – input constraints
                  source
                  ConstrainedAffineControlDiscreteSystem

                  Continuous-time affine control system with domain constraints of the form:

                  \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • c – affine term
                  • X – state constraints
                  • U – input constraints
                  source
                  LinearAlgebraicDiscreteSystem

                  Discrete-time linear algebraic system of the form:

                  \[ E x_{k+1} = A x_k \; \forall k.\]

                  Fields

                  • A – state matrix
                  • E – matrix, same size as A
                  source
                  ConstrainedLinearAlgebraicDiscreteSystem

                  Discrete-time linear system with domain constraints of the form:

                  \[ E x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                  Fields

                  • A – state matrix
                  • E – matrix, same size as A
                  • X – state constraints
                  source
                  PolynomialDiscreteSystem

                  Discrete-time polynomial system of the form:

                  \[ x_{k+1} = p(x_k) \; \forall k.\]

                  Fields

                  • p – polynomial vector field
                  • statedim – number of state variables
                  source
                  ConstrainedPolynomialDiscreteSystem

                  Discrete-time polynomial system with domain constraints:

                  \[ x_{k+1} = p(x_k), \;  x_k ∈ \mathcal{X} \; \forall k.\]

                  Fields

                  • p – polynomial
                  • X – constraint set
                  • statedim – number of state variables
                  source
                  BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                  Discrete-time system defined by a right-hand side of the form:

                  \[ x_{k+1} = f(x_k) \; \forall k.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  source
                  ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                  Discrete-time system defined by a right-hand side with domain constraints of the form:

                  \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • X – state constraints
                  source
                  BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                  Discrete-time control system defined by a right-hand side of the form:

                  \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • inputdim – number of input variables
                  source
                  ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                  Discrete-time control system defined by a right-hand side with domain constraints of the form:

                  \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • inputdim – number of input variables
                  • X – state constraints
                  • U – input constraints
                  source
                  NoisyLinearDiscreteSystem

                  Discrete-time linear system with additive disturbance of the form:

                  \[ x_{k+1} = A x_k + D w_k \; \forall k.\]

                  Fields

                  • A – state matrix
                  • D – noise matrix
                  source
                  NoisyConstrainedLinearDiscreteSystem

                  Discrete-time linear system with additive disturbance and domain constraints of the form:

                  \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                  Fields

                  • A – state matrix
                  • D – noise matrix
                  • X – state constraints
                  • W – disturbance set
                  source
                  NoisyLinearControlDiscreteSystem

                  Continuous-time linear control system with additive disturbance of the form:

                  \[ x_{k+1} = A x_k + B u_k + D w_k \; \forall k.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • D – noise matrix
                  source
                  NoisyConstrainedLinearControlDiscreteSystem

                  Continuous-time linear control system with additive disturbance and domain constraints of the form:

                  \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • D – noise matrix
                  • X – state constraints
                  • U – input constraints
                  • W – disturbance set
                  source
                  NoisyAffineControlDiscreteSystem

                  Continuous-time affine control system with additive disturbance of the form:

                  \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • c – affine term
                  • D – noise matrix
                  source
                  NoisyConstrainedAffineControlDiscreteSystem

                  Continuous-time affine control system with additive disturbance and domain constraints of the form:

                  \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                  Fields

                  • A – state matrix
                  • B – input matrix
                  • c – affine term
                  • D – noise matrix
                  • X – state constraints
                  • U – input constraints
                  • W – disturbance set
                  source
                  NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                  Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                  \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • inputdim – number of input variables
                  • noisedim – number of noise variables
                  source
                  NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                  Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                  \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                  Fields

                  • f – function that holds the right-hand side
                  • statedim – number of state variables
                  • inputdim – number of input variables
                  • noisedim – number of noise variables
                  • X – state constraints
                  • U – input constraints
                  • W – disturbance set
                  source

                  Discretization Algorithms

                  AbstractDiscretizationAlgorithm

                  Abstract supertype for all discretization algorithms.

                  Note

                  For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                  _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                  +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                  are required.

                  source
                  ExactDiscretization <: AbstractDiscretizationAlgorithm

                  Exact discretization algorithm for affine systems.

                  Algorithm

                  This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                  Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                  The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                  The algorithm described above is a well known result from the literature [1].

                  [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                  source
                  EulerDiscretization <: AbstractDiscretizationAlgorithm

                  Euler discretization algorithm for affine systems.

                  Algorithm

                  This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                  Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                  The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                  The algorithm described above is a well known result from the literature [1].

                  [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                  source

                  System macro

                  system(expr...)

                  Return an instance of the system type corresponding to the given expressions.

                  Input

                  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                  Output

                  A system that best matches the given expressions.

                  Notes

                  Terms. The expression expr contains one or more of the following sub-expressions:

                  • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                  • set constraints, e.g. x ∈ X
                  • input constraints, e.g. u ∈ U
                  • dimensionality, e.g. dim: (2,1) or dim = 1
                  • specification of the input variable, e.g. input: u or input = u
                  • specification of the noise variable, e,g, noise: w or noise = w

                  The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                  @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                  The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                  Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                  Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                  Exceptions. The following exceptions and particular cases apply:

                  • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                  • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                  • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                  Examples

                  Let us first create a continuous linear system using this macro:

                  julia> A = [1. 0; 0 1.];
                  +
                  +julia> @system(x' = A*x)
                  +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                  A discrete system is defined by using :

                  julia> @system(x⁺ = A*x)
                  +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                  Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                  julia> using LazySets
                  +
                  +julia> B = Matrix([1. 0.5]');
                  +
                  +julia> c = [1., 1.5];
                  +
                  +julia> X = BallInf(zeros(2), 10.);
                  +
                  +julia> U = BallInf(zeros(1), 2.);
                  +
                  +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                  +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                  For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                  julia> f(x, u) = x + u;
                  +
                  +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                  +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                  source

                  Initial-value problem macro

                  ivp(expr...)

                  Return an instance of the initial-value problem type corresponding to the given expressions.

                  Input

                  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                  Output

                  An initial-value problem that best matches the given expressions.

                  Notes

                  This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                  Examples

                  julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                  +
                  +julia> typeof(p)
                  +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                  +
                  +julia> initial_state(p)
                  +1-element Array{Float64,1}:
                  + 1.0
                  source

                  Identity operator

                  IdentityMultiple{T} < AbstractMatrix{T} where T

                  A scalar multiple of the identity matrix of given order and numeric type.

                  Fields

                  • M – uniform scaling operator of type T
                  • n – size of the identity matrix

                  Notes

                  This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                  Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                  The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                  Examples

                  The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                  julia> using MathematicalSystems: IdentityMultiple
                  +
                  +julia> I2 = I(2)
                  +IdentityMultiple{Float64} of value 1.0 and order 2
                  +
                  +julia> I2 + I2
                  +IdentityMultiple{Float64} of value 2.0 and order 2
                  +
                  +julia> 4*I2
                  +IdentityMultiple{Float64} of value 4.0 and order 2

                  The numeric type (default Float64) can be passed as a second argument:

                  julia> I2r = I(2, Rational{Int})
                  +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                  +
                  +julia> I2r + I2r
                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                  +
                  +julia> 4*I2r
                  +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                  To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                  julia> I2 = I(2.0, 2)
                  +IdentityMultiple{Float64} of value 2.0 and order 2
                  +
                  +julia> I2r = I(2//1, 2)
                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                  Or use the constructor passing the UniformScaling (I):

                  julia> I2 = IdentityMultiple(2.0*I, 2)
                  +IdentityMultiple{Float64} of value 2.0 and order 2
                  +
                  +julia> I2r = IdentityMultiple(2//1*I, 2)
                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                  source

                  Initial Value Problems

                  InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                  Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                  Fields

                  • s – system
                  • x0 – initial state

                  Examples

                  The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                  julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                  +
                  +julia> x₀ = [-1/2, 1/2];
                  +
                  +julia> p = InitialValueProblem(s, x₀);
                  +
                  +julia> initial_state(p) # same as p.x0
                  +2-element Array{Float64,1}:
                  + -0.5
                  +  0.5
                  +
                  +julia> statedim(p)
                  +2
                  +
                  +julia> inputdim(p)
                  +0
                  source
                  IVP

                  IVP is an alias for InitialValueProblem.

                  source
                  initial_state(ivp::InitialValueProblem)

                  Return the initial state of an initial-value problem.

                  Input

                  • ivp – initial-value problem

                  Output

                  The initial state of an initial-value problem.

                  source
                  system(ivp::InitialValueProblem)

                  Return the system wrapped by an initial-value problem.

                  Input

                  • ivp – initial-value problem

                  Output

                  The system of the given initial-value problem.

                  source

                  Input Types

                  AbstractInput

                  Abstract supertype for all input types.

                  Notes

                  The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                  Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                  A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                  source
                  ConstantInput{UT} <: AbstractInput

                  Type representing an input that remains constant in time.

                  Fields

                  • U – input set

                  Examples

                  The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                  julia> c = ConstantInput(-1//2)
                  +ConstantInput{Rational{Int64}}(-1//2)
                  +
                  +julia> iterate(c, 1)
                  +(-1//2, nothing)
                  +
                  +julia> iterate(c, 2)
                  +(-1//2, nothing)
                  +
                  +julia> collect(nextinput(c, 4))
                  +4-element Array{Rational{Int64},1}:
                  + -1//2
                  + -1//2
                  + -1//2
                  + -1//2

                  The elements of this input are rational numbers:

                  julia> eltype(c)
                  +Rational{Int64}

                  To transform a constant input, you can use map as in:

                  julia> map(x->2*x, c)
                  +ConstantInput{Rational{Int64}}(-1//1)
                  source
                  VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                  Type representing an input that may vary with time.

                  Fields

                  • U – vector of input sets

                  Examples

                  The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                  julia> v = VaryingInput([-1//2, 1//2])
                  +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                  +
                  +julia> length(v)
                  +2
                  +
                  +julia> eltype(v)
                  +Rational{Int64}

                  Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                  julia> iterate(v, 1)
                  +(-1//2, 2)
                  +
                  +julia> iterate(v, 2)
                  +(1//2, 3)

                  The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                  julia> typeof(nextinput(v))
                  +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                  +
                  +julia> collect(nextinput(v, 1))
                  +1-element Array{Rational{Int64},1}:
                  + -1//2
                  +
                  +julia> collect(nextinput(v, 2))
                  +2-element Array{Rational{Int64},1}:
                  + -1//2
                  +  1//2

                  You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                  julia> collect(v)
                  +2-element Array{Rational{Int64},1}:
                  + -1//2
                  +  1//2
                  +
                  +julia> [2*vi for vi in v]
                  +2-element Array{Rational{Int64},1}:
                  + -1//1
                  +  1//1

                  Since this input type is finite, querying more elements than its length returns the full vector:

                  julia> collect(nextinput(v, 4))
                  +2-element Array{Rational{Int64},1}:
                  + -1//2
                  +  1//2

                  To transform a varying input, you can use map as in:

                  julia> map(x->2*x, v)
                  +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                  source

                  Maps

                  AbstractMap

                  Abstract supertype for all map types.

                  source
                  IdentityMap

                  An identity map,

                  \[ x ↦ x.\]

                  Fields

                  • dim – dimension
                  source
                  ConstrainedIdentityMap

                  An identity map with state constraints of the form:

                  \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                  Fields

                  • dim – dimension
                  • X – state constraints
                  source
                  LinearMap

                  A linear map,

                  \[ x ↦ Ax\]

                  Fields

                  • A – matrix
                  source
                  ConstrainedLinearMap

                  A linear map with state constraints of the form:

                  \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                  Fields

                  • A – matrix
                  • X – state constraints
                  source
                  AffineMap

                  An affine map,

                  \[ x ↦ Ax + c.\]

                  Fields

                  • A – matrix
                  • c – vector
                  source
                  ConstrainedAffineMap

                  An affine map with state constraints of the form:

                  \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                  Fields

                  • A – matrix
                  • c – vector
                  • X – state constraints
                  source
                  LinearControlMap

                  A linear control map,

                  \[ (x, u) ↦ Ax + Bu.\]

                  Fields

                  • A – matrix
                  • B – matrix
                  source
                  ConstrainedLinearControlMap

                  A linear control map with state and input constraints,

                  \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                  Fields

                  • A – matrix
                  • B – matrix
                  • X – state constraints
                  • U – input constraints
                  source
                  AffineControlMap

                  An affine control map,

                  \[ (x, u) ↦ Ax + Bu + c.\]

                  Fields

                  • A – matrix
                  • B – matrix
                  • c – vector
                  source
                  ConstrainedAffineControlMap

                  An affine control map with state and input constraints,

                  \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                  Fields

                  • A – matrix
                  • B – matrix
                  • c – vector
                  • X – state constraints
                  • U – input constraints
                  source
                  ResetMap

                  A reset map,

                  \[ x ↦ R(x),\]

                  such that a subset of the variables is given a specified value, and the rest are unchanged.

                  Fields

                  • dim – dimension
                  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                  source
                  ConstrainedResetMap

                  A reset map with state constraints of the form:

                  \[ x ↦ R(x), x ∈ \mathcal{X},\]

                  such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                  Fields

                  • dim – dimension
                  • X – state constraints
                  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                  source

                  Macros

                  map(ex, args)

                  Return an instance of the map type corresponding to the given expression.

                  Input

                  • ex – an expression defining the map, in the form of an anonymous function
                  • args – additional optional arguments

                  Output

                  A map that best matches the given expression.

                  Examples

                  Let us first create a linear map using this macro:

                  julia> @map x -> [1 0; 0 0]*x
                  +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                  We can create an affine system as well:

                  julia> @map x -> [1 0; 0 0]*x + [2, 0]
                  +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                  Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                  julia> @map(x -> x, dim=5)
                  +IdentityMap(5)

                  An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                  julia> @map x -> I(5)*x
                  +IdentityMap(5)
                  source

                  Systems with output

                  SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                  Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                  Fields

                  • s – system of type ST
                  • outputmap – output map of type MT
                  source
                  LinearTimeInvariantSystem(A, B, C, D)

                  A linear time-invariant system with of the form

                  \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                  Input

                  • A – matrix
                  • B – matrix
                  • C – matrix
                  • D – matrix

                  Output

                  A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                  source
                  LinearTimeInvariantSystem(A, B, C, D, X, U)

                  A linear time-invariant system with state and input constraints of the form

                  \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                  where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                  Input

                  • A – matrix
                  • B – matrix
                  • C – matrix
                  • D – matrix
                  • X – state constraints
                  • U – input constraints

                  Output

                  A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                  source
                  LTISystem

                  LTISystem is an alias for LinearTimeInvariantSystem.

                  source
                  diff --git a/v0.11.1/search/index.html b/v0.11.1/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.1/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                  Search

                  Search

                  Number of results: loading...

                    diff --git a/v0.11.1/search_index.js b/v0.11.1/search_index.js new file mode 100644 index 00000000..ec99e837 --- /dev/null +++ b/v0.11.1/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro-1","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s3} where #s3<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.1/siteinfo.js b/v0.11.1/siteinfo.js new file mode 100644 index 00000000..245fb016 --- /dev/null +++ b/v0.11.1/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.1"; diff --git a/v0.11.2/about/index.html b/v0.11.2/about/index.html new file mode 100644 index 00000000..53f1576e --- /dev/null +++ b/v0.11.2/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                    About

                    About

                    This page contains some general information about this project, and recommendations about contributing.

                    Contributing

                    If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                    Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                    Branches and pull requests (PR)

                    We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                    Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                    Unit testing and continuous integration (CI)

                    This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                    When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                    $ julia --color=yes test/runtests.jl

                    Alternatively, you can achieve the same from inside the REPL using the following command:

                    julia> Pkg.test("MathematicalSystems")

                    We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                    Contributing to the documentation

                    New functions and types should be documented according to our guidelines directly in the source code.

                    You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                    julia> ?LinearContinuousSystem

                    This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                    To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                    $ julia --color=yes docs/make.jl

                    Note that this also runs all doctests which will take some time.

                    Related projects

                    This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                    Below we list more related projects.

                    Package nameDescription
                    HybridSystems.jlHybrid Systems definitions in Julia.
                    LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                    ControlToolbox.jlAnalysis and design tools for control systems.
                    ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                    DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                    ControlSystems.jlA Control Systems Toolbox for Julia
                    ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                    Credits

                    These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                    diff --git a/v0.11.2/assets/arrow.svg b/v0.11.2/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.2/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.2/assets/documenter.css b/v0.11.2/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.2/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                    the is very first thing on the page (i.e. the second element + * in the
                    , * after the
                    , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                     surrounding the , while
                    + * highlight.js applies the .hljs style directly to the  tag.
                    + */
                    +.hljs {
                    +    background-color: transparent;
                    +    padding: 0;
                    +}
                    +
                    +@media only screen and (max-width: 768px) {
                    +    nav.toc {
                    +        position: fixed;
                    +        width: 16em;
                    +        left: -16em;
                    +        -webkit-overflow-scrolling: touch;
                    +        -webkit-transition-property: left; /* Safari */
                    +        -webkit-transition-duration: 0.3s; /* Safari */
                    +        transition-property: left;
                    +        transition-duration: 0.3s;
                    +        -webkit-transition-timing-function: ease-out; /* Safari */
                    +        transition-timing-function: ease-out;
                    +        z-index: 2;
                    +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                    +    }
                    +
                    +    nav.toc.show {
                    +        left: 0;
                    +    }
                    +
                    +    article {
                    +        margin-left: 0;
                    +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                    +        overflow-wrap: break-word;
                    +    }
                    +
                    +    article > header {
                    +        position: fixed;
                    +        left: 0;
                    +        z-index: 1;
                    +    }
                    +
                    +    article > header nav, hr {
                    +        display: none;
                    +    }
                    +
                    +    article > header div#topbar {
                    +        display: block; /* is mobile */
                    +        position: fixed;
                    +        width: 100%;
                    +        height: 1.5em;
                    +        padding-top: 1em;
                    +        padding-bottom: 1em;
                    +        background-color: #fcfcfc;
                    +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                    +        top: 0;
                    +        -webkit-transition-property: top; /* Safari */
                    +        -webkit-transition-duration: 0.3s; /* Safari */
                    +        transition-property: top;
                    +        transition-duration: 0.3s;
                    +    }
                    +
                    +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                    +        top: -4em;
                    +        -webkit-transition-property: top; /* Safari */
                    +        -webkit-transition-duration: 0.7s; /* Safari */
                    +        transition-property: top;
                    +        transition-duration: 0.7s;
                    +    }
                    +
                    +    article > header div#topbar span {
                    +        width: 80%;
                    +        height: 1.5em;
                    +        margin-top: -0.1em;
                    +        margin-left: 0.9em;
                    +        font-size: 1.2em;
                    +        overflow: hidden;
                    +    }
                    +
                    +    article > header div#topbar a.fa-bars {
                    +        float: right;
                    +        padding: 0.6em;
                    +        margin-top: -0.6em;
                    +        margin-right: 0.3em;
                    +        font-size: 1.5em;
                    +    }
                    +
                    +    article > header div#topbar a.fa-bars:visited {
                    +        color: #3091d1;
                    +    }
                    +
                    +    article table {
                    +        overflow-x: auto;
                    +        display: block;
                    +    }
                    +
                    +    article div.MathJax_Display {
                    +        overflow: scroll;
                    +    }
                    +
                    +    article span.MathJax {
                    +        overflow: hidden;
                    +    }
                    +}
                    +
                    +@media only screen and (max-width: 320px) {
                    +    body {
                    +        font-size: 15px;
                    +    }
                    +}
                    diff --git a/v0.11.2/assets/documenter.js b/v0.11.2/assets/documenter.js
                    new file mode 100644
                    index 00000000..761ae294
                    --- /dev/null
                    +++ b/v0.11.2/assets/documenter.js
                    @@ -0,0 +1,132 @@
                    +/*
                    + * Part of Documenter.jl
                    + *     https://github.com/JuliaDocs/Documenter.jl
                    + *
                    + * License: MIT
                    + */
                    +
                    +requirejs.config({
                    +    paths: {
                    +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                    +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                    +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                    +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                    +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                    +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                    +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                    +    },
                    +    shim: {
                    +        'mathjax' : {
                    +            exports: "MathJax"
                    +        },
                    +        'highlight-julia': ['highlight'],
                    +        'highlight-julia-repl': ['highlight'],
                    +    }
                    +});
                    +
                    +// Load MathJax
                    +require(['mathjax'], function(MathJax) {
                    +    MathJax.Hub.Config({
                    +      "tex2jax": {
                    +        inlineMath: [['$','$'], ['\\(','\\)']],
                    +        processEscapes: true
                    +      }
                    +    });
                    +    MathJax.Hub.Config({
                    +      config: ["MMLorHTML.js"],
                    +      jax: [
                    +        "input/TeX",
                    +        "output/HTML-CSS",
                    +        "output/NativeMML"
                    +      ],
                    +      extensions: [
                    +        "MathMenu.js",
                    +        "MathZoom.js",
                    +        "TeX/AMSmath.js",
                    +        "TeX/AMSsymbols.js",
                    +        "TeX/autobold.js",
                    +        "TeX/autoload-all.js"
                    +      ]
                    +    });
                    +    MathJax.Hub.Config({
                    +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                    +    });
                    +})
                    +
                    +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                    +    $(document).ready(function() {
                    +        hljs.initHighlighting();
                    +    })
                    +
                    +})
                    +
                    +// update the version selector with info from the siteinfo.js and ../versions.js files
                    +require(['jquery'], function($) {
                    +    $(document).ready(function() {
                    +        var version_selector = $("#version-selector");
                    +
                    +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                    +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                    +            var option = $("");
                    +            version_selector.append(option);
                    +        }
                    +
                    +        if (typeof DOC_VERSIONS !== 'undefined') {
                    +            var existing_versions = $('#version-selector > option');
                    +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                    +            DOC_VERSIONS.forEach(function(each) {
                    +                var version_url = documenterBaseURL + "/../" + each;
                    +                var existing_id = $.inArray(each, existing_versions_texts);
                    +                // if not already in the version selector, add it as a new option,
                    +                // otherwise update the old option with the URL and enable it
                    +                if (existing_id == -1) {
                    +                    var option = $("");
                    +                    version_selector.append(option);
                    +                } else {
                    +                    var option = existing_versions[existing_id];
                    +                    option.value = version_url;
                    +                    option.disabled = false;
                    +                }
                    +            });
                    +        }
                    +
                    +        // only show the version selector if the selector has been populated
                    +        if ($('#version-selector > option').length > 0) {
                    +            version_selector.css("visibility", "visible");
                    +        }
                    +
                    +        // Scroll the navigation bar to the currently selected menu item
                    +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                    +    })
                    +
                    +})
                    +
                    +// mobile
                    +require(['jquery', 'headroom'], function($, Headroom) {
                    +    $(document).ready(function() {
                    +        var navtoc = $("nav.toc");
                    +        $("nav.toc li.current a.toctext").click(function() {
                    +            navtoc.toggleClass('show');
                    +        });
                    +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                    +            ev.preventDefault();
                    +            navtoc.toggleClass('show');
                    +            if (navtoc.hasClass('show')) {
                    +                var title = $("article > header div#topbar span").text();
                    +                $("nav.toc ul li a:contains('" + title + "')").focus();
                    +            }
                    +        });
                    +        $("article#docs").bind('click', function(ev) {
                    +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                    +                return;
                    +            }
                    +            if (navtoc.hasClass('show')) {
                    +                navtoc.removeClass('show');
                    +            }
                    +        });
                    +        if ($("article > header div#topbar").css('display') == 'block') {
                    +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                    +            headroom.init();
                    +        }
                    +    })
                    +})
                    diff --git a/v0.11.2/assets/juliareach.css b/v0.11.2/assets/juliareach.css
                    new file mode 100644
                    index 00000000..64b0d92d
                    --- /dev/null
                    +++ b/v0.11.2/assets/juliareach.css
                    @@ -0,0 +1,583 @@
                    +/*
                    + * The default CSS style for Documenter.jl generated sites
                    + *
                    + * Heavily inspired by the Julia Sphinx theme
                    + *     https://github.com/JuliaLang/JuliaDoc
                    + * which extends the sphinx_rtd_theme
                    + *     https://github.com/snide/sphinx_rtd_theme
                    + *
                    + * Part of Documenter.jl
                    + *     https://github.com/JuliaDocs/Documenter.jl
                    + *
                    + * License: MIT
                    + */
                    +
                    +/* The original CSS is modified such that it right-justifies the text. */
                    +
                    +/* fonts */
                    +body, input {
                    +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                    +  font-size: 16px;
                    +  color: #222;
                    +  text-rendering: optimizeLegibility;
                    +}
                    +
                    +pre, code, kbd {
                    +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                    +  font-size: 0.90em;
                    +}
                    +
                    +pre code {
                    +  font-size: 1em;
                    +}
                    +
                    +a {
                    +    color: #2980b9;
                    +    text-decoration: none;
                    +}
                    +
                    +a:hover {
                    +    color: #3091d1;
                    +}
                    +
                    +a:visited {
                    +    color: #9b59b6;
                    +}
                    +
                    +body {
                    +    line-height: 1.5;
                    +}
                    +
                    +h1 {
                    +    font-size: 1.75em;
                    +}
                    +
                    +/* Unless the 

                    the is very first thing on the page (i.e. the second element + * in the
                    , * after the
                    , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                     surrounding the , while
                    + * highlight.js applies the .hljs style directly to the  tag.
                    + */
                    +.hljs {
                    +    background-color: transparent;
                    +    padding: 0;
                    +}
                    +
                    +@media only screen and (max-width: 768px) {
                    +    nav.toc {
                    +        position: fixed;
                    +        overflow-y: scroll;
                    +        width: 16em;
                    +        left: -16em;
                    +        -webkit-overflow-scrolling: touch;
                    +        -webkit-transition-property: left; /* Safari */
                    +        -webkit-transition-duration: 0.3s; /* Safari */
                    +        transition-property: left;
                    +        transition-duration: 0.3s;
                    +        -webkit-transition-timing-function: ease-out; /* Safari */
                    +        transition-timing-function: ease-out;
                    +        z-index: 2;
                    +    }
                    +
                    +    nav.toc.show {
                    +        left: 0;
                    +    }
                    +
                    +    article {
                    +        margin-left: 0;
                    +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                    +        overflow-wrap: break-word;
                    +    }
                    +
                    +    article > header {
                    +        position: fixed;
                    +        left: 0;
                    +        z-index: 1;
                    +    }
                    +
                    +    article > header nav, hr {
                    +        display: none;
                    +    }
                    +
                    +    article > header div#topbar {
                    +        display: block; /* is mobile */
                    +        position: fixed;
                    +        width: 100%;
                    +        height: 1.5em;
                    +        padding-top: 1em;
                    +        padding-bottom: 1em;
                    +        background-color: #fcfcfc;
                    +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                    +        top: 0;
                    +        -webkit-transition-property: top; /* Safari */
                    +        -webkit-transition-duration: 0.3s; /* Safari */
                    +        transition-property: top;
                    +        transition-duration: 0.3s;
                    +    }
                    +
                    +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                    +        top: -4em;
                    +        -webkit-transition-property: top; /* Safari */
                    +        -webkit-transition-duration: 0.7s; /* Safari */
                    +        transition-property: top;
                    +        transition-duration: 0.7s;
                    +    }
                    +
                    +    article > header div#topbar span {
                    +        position: fixed;
                    +        width: 80%;
                    +        height: 1.5em;
                    +        margin-top: -0.1em;
                    +        margin-left: 0.9em;
                    +        font-size: 1.2em;
                    +        overflow: hidden;
                    +    }
                    +
                    +    article > header div#topbar a.fa-bars {
                    +        float: right;
                    +        padding: 0.6em;
                    +        margin-top: -0.6em;
                    +        margin-right: 0.3em;
                    +        font-size: 1.5em;
                    +    }
                    +
                    +    article > header div#topbar a.fa-bars:visited {
                    +        color: #3091d1;
                    +    }
                    +
                    +    article table {
                    +        overflow-x: auto;
                    +        display: block;
                    +    }
                    +
                    +    article div.MathJax_Display {
                    +        overflow: scroll;
                    +    }
                    +
                    +    article span.MathJax {
                    +        overflow: hidden;
                    +    }
                    +}
                    +
                    +@media only screen and (max-width: 320px) {
                    +    body {
                    +        font-size: 15px;
                    +    }
                    +}
                    diff --git a/v0.11.2/assets/search.js b/v0.11.2/assets/search.js
                    new file mode 100644
                    index 00000000..5d32c3aa
                    --- /dev/null
                    +++ b/v0.11.2/assets/search.js
                    @@ -0,0 +1,250 @@
                    +/*
                    + * Part of Documenter.jl
                    + *     https://github.com/JuliaDocs/Documenter.jl
                    + *
                    + * License: MIT
                    + */
                    +
                    +// parseUri 1.2.2
                    +// (c) Steven Levithan 
                    +// MIT License
                    +function parseUri (str) {
                    +	var	o   = parseUri.options,
                    +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                    +		uri = {},
                    +		i   = 14;
                    +
                    +	while (i--) uri[o.key[i]] = m[i] || "";
                    +
                    +	uri[o.q.name] = {};
                    +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                    +		if ($1) uri[o.q.name][$1] = $2;
                    +	});
                    +
                    +	return uri;
                    +};
                    +parseUri.options = {
                    +	strictMode: false,
                    +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                    +	q:   {
                    +		name:   "queryKey",
                    +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                    +	},
                    +	parser: {
                    +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                    +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                    +	}
                    +};
                    +
                    +requirejs.config({
                    +    paths: {
                    +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                    +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                    +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                    +    }
                    +});
                    +
                    +var currentScript = document.currentScript;
                    +
                    +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                    +    $("#search-form").submit(function(e) {
                    +        e.preventDefault()
                    +    })
                    +
                    +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                    +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                    +    // ideally we'd just filter the original list but it's not available as a variable
                    +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                    +        'a',
                    +        'able',
                    +        'about',
                    +        'across',
                    +        'after',
                    +        'almost',
                    +        'also',
                    +        'am',
                    +        'among',
                    +        'an',
                    +        'and',
                    +        'are',
                    +        'as',
                    +        'at',
                    +        'be',
                    +        'because',
                    +        'been',
                    +        'but',
                    +        'by',
                    +        'can',
                    +        'cannot',
                    +        'could',
                    +        'dear',
                    +        'did',
                    +        'does',
                    +        'either',
                    +        'ever',
                    +        'every',
                    +        'from',
                    +        'got',
                    +        'had',
                    +        'has',
                    +        'have',
                    +        'he',
                    +        'her',
                    +        'hers',
                    +        'him',
                    +        'his',
                    +        'how',
                    +        'however',
                    +        'i',
                    +        'if',
                    +        'into',
                    +        'it',
                    +        'its',
                    +        'just',
                    +        'least',
                    +        'like',
                    +        'likely',
                    +        'may',
                    +        'me',
                    +        'might',
                    +        'most',
                    +        'must',
                    +        'my',
                    +        'neither',
                    +        'no',
                    +        'nor',
                    +        'not',
                    +        'of',
                    +        'off',
                    +        'often',
                    +        'on',
                    +        'only',
                    +        'or',
                    +        'other',
                    +        'our',
                    +        'own',
                    +        'rather',
                    +        'said',
                    +        'say',
                    +        'says',
                    +        'she',
                    +        'should',
                    +        'since',
                    +        'so',
                    +        'some',
                    +        'than',
                    +        'that',
                    +        'the',
                    +        'their',
                    +        'them',
                    +        'then',
                    +        'there',
                    +        'these',
                    +        'they',
                    +        'this',
                    +        'tis',
                    +        'to',
                    +        'too',
                    +        'twas',
                    +        'us',
                    +        'wants',
                    +        'was',
                    +        'we',
                    +        'were',
                    +        'what',
                    +        'when',
                    +        'who',
                    +        'whom',
                    +        'why',
                    +        'will',
                    +        'would',
                    +        'yet',
                    +        'you',
                    +        'your'
                    +        ])
                    +
                    +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                    +    // would not find anything if searching for "add!", only for the entire qualification
                    +    lunr.tokenizer.separator = /[\s\-\.]+/
                    +
                    +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                    +    lunr.trimmer = function (token) {
                    +        return token.update(function (s) {
                    +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                    +        })
                    +    }
                    +
                    +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                    +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                    +
                    +    var index = lunr(function () {
                    +        this.ref('location')
                    +        this.field('title')
                    +        this.field('text')
                    +        documenterSearchIndex['docs'].forEach(function(e) {
                    +            this.add(e)
                    +        }, this)
                    +    })
                    +    var store = {}
                    +
                    +    documenterSearchIndex['docs'].forEach(function(e) {
                    +        store[e.location] = {title: e.title, category: e.category}
                    +    })
                    +
                    +    $(function(){
                    +        function update_search(querystring) {
                    +            tokens = lunr.tokenizer(querystring)
                    +            results = index.query(function (q) {
                    +                tokens.forEach(function (t) {
                    +                    q.term(t.toString(), {
                    +                        fields: ["title"],
                    +                        boost: 100,
                    +                        usePipeline: false,
                    +                        editDistance: 0,
                    +                        wildcard: lunr.Query.wildcard.NONE
                    +                    })
                    +                    q.term(t.toString(), {
                    +                        fields: ["title"],
                    +                        boost: 10,
                    +                        usePipeline: false,
                    +                        editDistance: 2,
                    +                        wildcard: lunr.Query.wildcard.NONE
                    +                    })
                    +                    q.term(t.toString(), {
                    +                        fields: ["text"],
                    +                        boost: 1,
                    +                        usePipeline: true,
                    +                        editDistance: 0,
                    +                        wildcard: lunr.Query.wildcard.NONE
                    +                    })
                    +                })
                    +            })
                    +            $('#search-info').text("Number of results: " + results.length)
                    +            $('#search-results').empty()
                    +            results.forEach(function(result) {
                    +                data = store[result.ref]
                    +                link = $('')
                    +                link.text(data.title)
                    +                link.attr('href', documenterBaseURL+'/'+result.ref)
                    +                cat = $('('+data.category+')')
                    +                li = $('
                  • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.2/index.html b/v0.11.2/index.html new file mode 100644 index 00000000..8623032d --- /dev/null +++ b/v0.11.2/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                    Home

                    MathematicalSystems.jl

                    MathematicalSystems is a Julia package for mathematical systems interfaces.

                    Features

                    • Generic and flexible systems definitions, while being fast and type stable.
                    • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                    • Iterator interfaces to handle constant or time-varying inputs.

                    Library Outline

                    diff --git a/v0.11.2/lib/internals/index.html b/v0.11.2/lib/internals/index.html new file mode 100644 index 00000000..69791475 --- /dev/null +++ b/v0.11.2/lib/internals/index.html @@ -0,0 +1,55 @@ + +Internals · MathematicalSystems.jl

                    Internals

                    Internals

                    This section describes functions that are internal to the library.

                    Expression handling

                    _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                    Return the system type whose field names match those in fields.

                    Input

                    • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                    • fields – tuple of field names

                    Output

                    The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                    Examples

                    julia> using MathematicalSystems: _corresponding_type
                    +
                    +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                    +LinearContinuousSystem
                    +
                    +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                    +ConstrainedLinearControlContinuousSystem
                    source
                    _capture_dim(expr)

                    Return the tuple containing the dimension(s) in expr.

                    Input

                    • expr – symbolic expression that can be of any of the following forms:

                      • :x or :(x) – state dimension
                      • :(x, u) – state and input dimension
                      • :(x, u, w) – state, input and noise dimensions

                    Output

                    • The scalar x if expr specifies the state dimension.
                    • The vector [x, u] if expr specifies state and input dimension.
                    • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                    source
                    extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                    Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                    For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                    • (:A_user, :A)
                    • (:B_user, :B)
                    • (:c_user, :c)
                    • (:D_user, :D)
                    • (:f_user, :f)
                    • (:statedim_user :statedim)
                    • (:inputdim_user :inputdim)
                    • (:noisedim_user :noisedim)

                    and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                    Input

                    • equation – dynamic equation
                    • state – state variable
                    • input – input variable
                    • noise – noise variable
                    • dim – dimensionality
                    • AT – abstract system type

                    Output

                    Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                    source
                    add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                    Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                    Input

                    • summand – expressions
                    • state – state variable
                    • input – input variable
                    • noise – noise variable

                    Output

                    Multiplication expression or symbol.

                    Example

                    julia> using MathematicalSystems: add_asterisk
                    +
                    +julia> add_asterisk(:(A1*x), :x, :u, :w)
                    +:(A1 * x)
                    +
                    +julia> add_asterisk(:(c1), :x, :u, :w)
                    +:c1
                    +
                    +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                    +:(A * x1)
                    +
                    +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                    +:(A * wb)
                    +
                    +julia> add_asterisk(:(A1u), :x, :u, :w)
                    +:(A1 * u)
                    +
                    +julia> add_asterisk(:(A1ub), :x, :u, :w)
                    +:A1ub
                    source
                    Base.sortFunction.
                    sort(parameters::Vector, order::Tuple)

                    Filter and sort the vector parameters according to order.

                    Input

                    • parameters – vector of tuples
                    • order – tuple of symbols

                    Output

                    A new vector of tuples corresponding to parameters filtered and sorted according to order.

                    Examples

                    julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                    +
                    +julia> sort(parameters, (:X, :U, :W))
                    +3-element Array{Tuple{Any,Symbol},1}:
                    + (:X1, :X)
                    + (:U1, :U)
                    + (:W1, :W)
                    +
                    +julia>  parameters = [(:const, :c), (:A, :A)];
                    +
                    +julia> sort(parameters, (:A, :B, :c, :D))
                    +2-element Array{Tuple{Any,Symbol},1}:
                    + (:A, :A)
                    + (:const, :c)

                    Notes

                    parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                    If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                    source

                    Querying expressions

                    is_equation(expr)

                    Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                    Input

                    • expr – expression

                    Output

                    A Bool indicating whether expr is an equation or not.

                    source
                    extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                    Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                    Input

                    • summands – array of expressions
                    • state – state variable
                    • input – input variable
                    • noise – noise variable

                    Output

                    Array of tuples of symbols with variable name and field name.

                    Example

                    julia> using MathematicalSystems: extract_sum
                    +
                    +julia> extract_sum([:(A1*x)], :x, :u, :w)
                    +1-element Array{Tuple{Any,Symbol},1}:
                    + (:(hcat(A1)), :A)
                    +
                    +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                    +3-element Array{Tuple{Any,Symbol},1}:
                    + (:(hcat(A1)), :A)
                    + (:(hcat(B1)), :B)
                    + (:(vcat(c)), :c)
                    +
                    +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                    +3-element Array{Tuple{Any,Symbol},1}:
                    + (:(hcat(A1)), :A)
                    + (:(hcat(B1)), :B)
                    + (:(hcat(B2)), :D)

                    Notes

                    If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                    If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                    Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                    source

                    Naming convention for systems' fields

                    Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                    FieldDescriptionGetter function
                    Astate matrixstate_matrix
                    Binput matrixinput_matrix
                    caffine termaffine_term
                    Dnoise matrixnoise_matrix
                    Xstate constraintsstateset
                    Uinput constraintsinputset
                    Wdisturbance setnoiseset
                    diff --git a/v0.11.2/lib/methods/index.html b/v0.11.2/lib/methods/index.html new file mode 100644 index 00000000..7deb8818 --- /dev/null +++ b/v0.11.2/lib/methods/index.html @@ -0,0 +1,20 @@ + +Methods · MathematicalSystems.jl

                    Methods

                    Methods

                    This section describes systems methods implemented in MathematicalSystems.jl.

                    States

                    statedim(s::AbstractSystem)

                    Returns the dimension of the state space of system s.

                    source
                    stateset(s::AbstractSystem)

                    Returns the set of allowed states of system s.

                    source

                    Inputs

                    inputdim(s::AbstractSystem)

                    Returns the dimension of the input space of system s.

                    source
                    inputset(s::AbstractSystem)

                    Returns the set of allowed inputs of system s.

                    source
                    nextinput(input::ConstantInput, n::Int=1)

                    Returns the first n elements of this input.

                    Input

                    • input – a constant input
                    • n – (optional, default: 1) the number of desired elements

                    Output

                    A repeated iterator that generates n equal samples of this input.

                    source
                    nextinput(input::VaryingInput, n::Int=1)

                    Returns the first n elements of this input.

                    Input

                    • input – varying input
                    • n – (optional, default: 1) number of desired elements

                    Output

                    An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                    source

                    Output

                    outputdim(m::AbstractMap)

                    Returns the dimension of the output space of the map m.

                    source
                    outputmap(s::SystemWithOutput)

                    Returns the output map of a system with output.

                    source

                    Traits

                    islinear(s::AbstractSystem)

                    Specifies if the dynamics of system s is specified by linear equations.

                    Notes

                    We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                    The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                    [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                    source
                    islinear(m::AbstractMap)

                    Specifies if the map m is linear or not.

                    Notes

                    A map is linear if it preserves the operations of scalar multiplication and vector addition.

                    source
                    isaffine(s::AbstractSystem)

                    Specifies if the dynamics of system s is specified by affine equations.

                    Notes

                    An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                    The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                    source
                    ispolynomial(s::AbstractSystem)

                    Specifies if the dynamics of system s is specified by polynomial equations.

                    The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                    source
                    isaffine(m::AbstractMap)

                    Specifies if the map m is affine or not.

                    Notes

                    An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                    source
                    isnoisy(s::AbstractSystem)

                    Determines if the dynamics of system s contains a noise term w.

                    The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                    source
                    iscontrolled(s::AbstractSystem)

                    Determines if the dynamics of system s contains a control input u.

                    The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                    source
                    isconstrained(s::AbstractSystem)

                    Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                    The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                    source
                    state_matrix(::AbstractSystem)

                    Return the state matrix of an affine system.

                    Notes

                    The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                    source
                    input_matrix(::AbstractSystem)

                    Return the input matrix of a system with linear input.

                    Notes

                    The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                    source
                    noise_matrix(::AbstractSystem)

                    Return the noise matrix of a system with linear noise.

                    Notes

                    The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                    source
                    affine_term(::AbstractSystem)

                    Return the affine term in an affine system.

                    Notes

                    The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                    source

                    Maps

                    apply(m::AbstractMap, args...)

                    Apply the rule specified by the map to the given arguments.

                    source

                    Successor

                    successor(system::DiscreteIdentitySystem, x::AbstractVector)

                    Return the successor state of a DiscreteIdentitySystem.

                    Input

                    • systemDiscreteIdentitySystem
                    • x – state (it should be any vector type)

                    Output

                    The same state x.

                    source
                    successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                    +          [check_constraints]=true)

                    Return the successor state of a ConstrainedDiscreteIdentitySystem.

                    Input

                    • systemConstrainedDiscreteIdentitySystem
                    • x – state (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state belongs to the state set

                    Output

                    The same state x.

                    source
                    successor(system::LinearDiscreteSystem, x::AbstractVector)

                    Return the successor state of a LinearDiscreteSystem.

                    Input

                    • systemLinearDiscreteSystem
                    • x – state (it should be any vector type)

                    Output

                    The result of applying the system to x.

                    source
                    successor(system::AffineDiscreteSystem, x::AbstractVector)

                    Return the successor state of a AffineDiscreteSystem.

                    Input

                    • systemAffineDiscreteSystem
                    • x – state (it should be any vector type)

                    Output

                    The result of applying the system to x.

                    source
                    successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                    Return the successor state of a LinearControlDiscreteSystem.

                    Input

                    • systemLinearControlDiscreteSystem
                    • x – state (it should be any vector type)
                    • u – input (it should be any vector type)

                    Output

                    The result of applying the system to x, with input u.

                    source
                    successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                    +          [check_constraints]=true)

                    Return the successor state of a ConstrainedLinearDiscreteSystem.

                    Input

                    • systemConstrainedLinearDiscreteSystem
                    • x – state (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state belongs to the state set

                    Output

                    The result of applying the system to x.

                    source
                    successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                    +          [check_constraints])

                    Return the successor state of a ConstrainedAffineDiscreteSystem.

                    Input

                    • systemConstrainedAffineDiscreteSystem
                    • x – state (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state belongs to the state set

                    Output

                    The result of applying the system to x.

                    source
                    successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                    +          u::AbstractVector; [check_constraints]=true)

                    Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                    Input

                    • systemConstrainedLinearControlDiscreteSystem
                    • x – state (it should be any vector type)
                    • u – input (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                    Output

                    The result of applying the system to x, with input u.

                    source
                    successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                    +          u::AbstractVector; [check_constraints]=true)

                    Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                    Input

                    • systemConstrainedAffineControlDiscreteSystem
                    • x – state (it should be any vector type)
                    • u – input (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                    Output

                    The result of applying the system to x, with input u.

                    source
                    successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                    Return the successor state of a BlackBoxDiscreteSystem.

                    Input

                    • systemBlackBoxDiscreteSystem
                    • x – state (it should be any vector type)

                    Output

                    The result of applying the system to x.

                    source
                    successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                    +          [check_constraints]=true)

                    Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                    Input

                    • systemConstrainedBlackBoxDiscreteSystem
                    • x – state (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state belongs to the state set

                    Output

                    The result of applying the system to x.

                    source
                    successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                    +          u::AbstractVector; [check_constraints]=true)

                    Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                    Input

                    • systemConstrainedBlackBoxControlDiscreteSystem
                    • x – state (it should be any vector type)
                    • u – input (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state belongs to the state set

                    Output

                    The result of applying the system to x, with input u.

                    source
                    successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                    +          w::AbstractVector; [check_constraints]=true)

                    Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                    Input

                    • systemNoisyConstrainedLinearDiscreteSystem
                    • x – state (it should be any vector type)
                    • w – noise (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state belongs to the state set

                    Output

                    The result of applying the system to x, with noise w.

                    source
                    successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                    +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                    Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                    Input

                    • systemNoisyConstrainedLinearControlDiscreteSystem
                    • x – state (it should be any vector type)
                    • u – input (it should be any vector type)
                    • w – noise (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                    Output

                    The result of applying the system to x, with input u and noise w.

                    source
                    successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                    +          u::AbstractVector; [check_constraints]=true)

                    Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                    Input

                    • systemNoisyConstrainedAffineControlDiscreteSystem
                    • x – state (it should be any vector type)
                    • u – input (it should be any vector type)
                    • w – noise (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                    Output

                    The result of applying the system to x, with input u and noise w.

                    source
                    successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                    +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                    Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                    Input

                    • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                    • x – state (it should be any vector type)
                    • u – input (it should be any vector type)
                    • w – noise (it should be any vector type)
                    • check_constraints – (optional, default: true) check if the state belongs to the state set

                    Output

                    The result of applying the system to x, with input u and noise w.

                    source

                    Discretization

                    discretize(system::AbstractContinuousSystem, ΔT::Real,
                    +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                    +           constructor=_default_complementary_constructor(system))

                    Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                    Input

                    • system – an affine continuous system
                    • ΔT – sampling time
                    • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                    • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                    Output

                    Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                    source

                    Internal Methods

                    _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                    +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                    Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                    Input

                    • `` – discretization algorithm, used for dispatch
                    • ΔT – sampling time
                    • A – state matrix
                    • B – input matrix
                    • c – vector
                    • D – noise matrix

                    Output

                    Returns a vector containing the discretized input arguments A, B, c and D.

                    Notes

                    See discretize for more details.

                    source
                    _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                    Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                    Input

                    • A – state matrix
                    • ΔT – sampling time
                    • algorithm – (optional, default: :exact) discretization algorithm

                    Output

                    Returns a vector containing the discretized input argument A.

                    Notes

                    See discretize for more details.

                    source
                    _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                    +            A::AbstractMatrix, B::AbstractMatrix)

                    Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                    Input

                    • algorithm – discretization algorithm
                    • ΔT – sampling time
                    • A – state matrix
                    • B – input or noise matrix

                    Output

                    Returns a vector containing the discretized input arguments A and B.

                    Notes

                    This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                    See discretize for more details.

                    source
                    _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                    +            A::AbstractMatrix,c::AbstractVector)

                    Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                    Input

                    • algorithm – discretization algorithm
                    • ΔT – sampling time
                    • A – state matrix
                    • c – vector

                    Output

                    Returns a vector containing the discretized input arguments A and c.

                    Notes

                    See discretize for more details.

                    source
                    _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                    +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                    Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                    Input

                    • algorithm – discretization algorithm
                    • ΔT – sampling time
                    • A – state matrix
                    • B – input matrix
                    • c – vector

                    Output

                    Returns a vector containing the discretized input arguments A, B and c.

                    Notes

                    See discretize for more details.

                    source
                    _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                    +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                    Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                    Input

                    • algorithm – discretization algorithm
                    • ΔT – sampling time
                    • A – state matrix
                    • B – input matrix
                    • D – noise matrix

                    Output

                    Returns a vector containing the discretized input arguments A, B and D.

                    Notes

                    See discretize for more details.

                    source
                    typename(system::AbstractSystem)

                    Returns the base type of system without parameter information.

                    Input

                    • systemAbstractSystem

                    Output

                    The base type of system.

                    source
                    _complementary_type(system_type::Type{<:AbstractSystem})

                    Return the complementary type of a system type system_type.

                    Input

                    • system_type – type of AbstractSystem

                    Ouput

                    Return complementary type of system_type.

                    Notes

                    There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                    To get the complementary type of system type, use _complementary_type(typename(system)).

                    source
                    diff --git a/v0.11.2/lib/types/index.html b/v0.11.2/lib/types/index.html new file mode 100644 index 00000000..d1dad380 --- /dev/null +++ b/v0.11.2/lib/types/index.html @@ -0,0 +1,122 @@ + +Types · MathematicalSystems.jl

                    Types

                    Types

                    This section describes systems types implemented in MathematicalSystems.jl.

                    Abstract Systems

                    AbstractSystem

                    Abstract supertype for all system types.

                    source
                    AbstractContinuousSystem

                    Abstract supertype for all continuous system types.

                    source
                    AbstractDiscreteSystem

                    Abstract supertype for all discrete system types.

                    source

                    Continuous Systems

                    ContinuousIdentitySystem <: AbstractContinuousSystem

                    Trivial identity continuous-time system of the form:

                    \[ x(t)' = 0 \; \forall t.\]

                    Fields

                    • statedim – number of state variables
                    source
                    ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                    Trivial identity continuous-time system with domain constraints of the form:

                    \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                    Fields

                    • statedim – number of state variables
                    • X – state constraints
                    source
                    LinearContinuousSystem

                    Continuous-time linear system of the form:

                    \[ x(t)' = A x(t) \; \forall t.\]

                    Fields

                    • A – state matrix
                    source
                    AffineContinuousSystem

                    Continuous-time affine system of the form:

                    \[ x(t)' = A x(t) + c \; \forall t.\]

                    Fields

                    • A – state matrix
                    • c – affine term
                    source
                    LinearControlContinuousSystem

                    Continuous-time linear control system of the form:

                    \[ x(t)' = A x(t) + B u(t) \; \forall t.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    source
                    ConstrainedLinearContinuousSystem

                    Continuous-time linear system with domain constraints of the form:

                    \[ x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                    Fields

                    • A – state matrix
                    • X – state constraints
                    source
                    ConstrainedAffineContinuousSystem

                    Continuous-time affine system with domain constraints of the form:

                    \[ x(t)' = A x(t) + c, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                    Fields

                    • A – state matrix
                    • c – affine term
                    • X – state constraints
                    source
                    ConstrainedAffineControlContinuousSystem

                    Continuous-time affine control system with domain constraints of the form:

                    \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • c – affine term
                    • X – state constraints
                    • U – input constraints
                    source
                    ConstrainedLinearControlContinuousSystem

                    Continuous-time linear control system with domain constraints of the form:

                    \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • X – state constraints
                    • U – input constraints
                    source
                    LinearAlgebraicContinuousSystem

                    Continuous-time linear algebraic system of the form:

                    \[ E x(t)' = A x(t) \; \forall t.\]

                    Fields

                    • A – state matrix
                    • E – matrix, same size as A
                    source
                    ConstrainedLinearAlgebraicContinuousSystem

                    Continuous-time linear system with domain constraints of the form:

                    \[ E x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                    Fields

                    • A – state matrix
                    • E – matrix, same size as A
                    • X – state constraints
                    source
                    PolynomialContinuousSystem

                    Continuous-time polynomial system of the form:

                    \[ x(t)' = p(x(t)) \; \forall t.\]

                    Fields

                    • p – polynomial vector field
                    • statedim – number of state variables
                    source
                    ConstrainedPolynomialContinuousSystem

                    Continuous-time polynomial system with domain constraints:

                    \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                    Fields

                    • p – polynomial vector field
                    • X – constraint set
                    • statedim – number of state variables
                    source
                    BlackBoxContinuousSystem <: AbstractContinuousSystem

                    Continuous-time system defined by a right-hand side of the form:

                    \[ x(t)' = f(x(t)) \; \forall t.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    source
                    ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                    Continuous-time system defined by a right-hand side with domain constraints of the form:

                    \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • X – state constraints
                    source
                    BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                    Continuous-time control system defined by a right-hand side of the form:

                    \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • inputdim – number of input variables
                    source
                    ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                    Continuous-time control system defined by a right-hand side with domain constraints of the form:

                    \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • inputdim – number of input variables
                    • X – state constraints
                    • U – input constraints
                    source
                    NoisyLinearContinuousSystem

                    Continuous-time linear system with additive disturbance of the form:

                    \[ x(t)' = A x(t) + D w(t) \; \forall t.\]

                    Fields

                    • A – state matrix
                    • D – noise matrix
                    source
                    NoisyConstrainedLinearContinuousSystem

                    Continuous-time linear system with additive disturbance and domain constraints of the form:

                    \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                    Fields

                    • A – state matrix
                    • D – noise matrix
                    • X – state constraints
                    • W – disturbance set
                    source
                    NoisyLinearControlContinuousSystem

                    Continuous-time linear control system with additive disturbance of the form:

                    \[ x(t)' = A x(t) + B u(t) + D w(t) \; \forall t.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • D – noise matrix
                    source
                    NoisyConstrainedLinearControlContinuousSystem

                    Continuous-time linear control system with additive disturbance and domain constraints of the form:

                    \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • D – noise matrix
                    • X – state constraints
                    • U – input constraints
                    • W – disturbance set
                    source
                    NoisyAffineControlContinuousSystem

                    Continuous-time affine control system with additive disturbance of the form:

                    \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • c – affine term
                    • D – noise matrix
                    source
                    NoisyConstrainedAffineControlContinuousSystem

                    Continuous-time affine control system with additive disturbance and domain constraints of the form:

                    \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • c – affine term
                    • D – noise matrix
                    • X – state constraints
                    • U – input constraints
                    • W – disturbance set
                    source
                    NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                    Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                    \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • inputdim – number of input variables
                    • noisedim – number of noise variables
                    source
                    NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                    Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                    \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • inputdim – number of input variables
                    • noisedim – number of noise variables
                    • X – state constraints
                    • U – input constraints
                    • W – disturbance set
                    source

                    Discrete Systems

                    DiscreteIdentitySystem <: AbstractDiscreteSystem

                    Trivial identity discrete-time system of the form:

                    \[ x_{k+1} = x_k \; \forall k.\]

                    Fields

                    • statedim – number of state variables
                    source
                    ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                    Trivial identity discrete-time system with domain constraints of the form:

                    \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                    Fields

                    • statedim – number of state variables
                    • X – state constraints
                    source
                    LinearDiscreteSystem

                    Discrete-time linear system of the form:

                    \[ x_{k+1} = A x_k \; \forall k.\]

                    Fields

                    • A – state matrix
                    source
                    AffineDiscreteSystem

                    Discrete-time affine system of the form:

                    \[ x_{k+1} = A x_k + c \; \forall k.\]

                    Fields

                    • A – state matrix
                    • c – affine term
                    source
                    LinearControlDiscreteSystem

                    Discrete-time linear control system of the form:

                    \[ x_{k+1} = A x_k + B u_k \; \forall k.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    source
                    ConstrainedLinearDiscreteSystem

                    Discrete-time linear system with domain constraints of the form:

                    \[ x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                    Fields

                    • A – state matrix
                    • X – state constraints
                    source
                    ConstrainedAffineDiscreteSystem

                    Discrete-time affine system with domain constraints of the form:

                    \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                    Fields

                    • A – state matrix
                    • c – affine term
                    • X – state constraints
                    source
                    ConstrainedLinearControlDiscreteSystem

                    Discrete-time linear control system with domain constraints of the form:

                    \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • X – state constraints
                    • U – input constraints
                    source
                    ConstrainedAffineControlDiscreteSystem

                    Continuous-time affine control system with domain constraints of the form:

                    \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • c – affine term
                    • X – state constraints
                    • U – input constraints
                    source
                    LinearAlgebraicDiscreteSystem

                    Discrete-time linear algebraic system of the form:

                    \[ E x_{k+1} = A x_k \; \forall k.\]

                    Fields

                    • A – state matrix
                    • E – matrix, same size as A
                    source
                    ConstrainedLinearAlgebraicDiscreteSystem

                    Discrete-time linear system with domain constraints of the form:

                    \[ E x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                    Fields

                    • A – state matrix
                    • E – matrix, same size as A
                    • X – state constraints
                    source
                    PolynomialDiscreteSystem

                    Discrete-time polynomial system of the form:

                    \[ x_{k+1} = p(x_k) \; \forall k.\]

                    Fields

                    • p – polynomial vector field
                    • statedim – number of state variables
                    source
                    ConstrainedPolynomialDiscreteSystem

                    Discrete-time polynomial system with domain constraints:

                    \[ x_{k+1} = p(x_k), \;  x_k ∈ \mathcal{X} \; \forall k.\]

                    Fields

                    • p – polynomial
                    • X – constraint set
                    • statedim – number of state variables
                    source
                    BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                    Discrete-time system defined by a right-hand side of the form:

                    \[ x_{k+1} = f(x_k) \; \forall k.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    source
                    ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                    Discrete-time system defined by a right-hand side with domain constraints of the form:

                    \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • X – state constraints
                    source
                    BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                    Discrete-time control system defined by a right-hand side of the form:

                    \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • inputdim – number of input variables
                    source
                    ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                    Discrete-time control system defined by a right-hand side with domain constraints of the form:

                    \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • inputdim – number of input variables
                    • X – state constraints
                    • U – input constraints
                    source
                    NoisyLinearDiscreteSystem

                    Discrete-time linear system with additive disturbance of the form:

                    \[ x_{k+1} = A x_k + D w_k \; \forall k.\]

                    Fields

                    • A – state matrix
                    • D – noise matrix
                    source
                    NoisyConstrainedLinearDiscreteSystem

                    Discrete-time linear system with additive disturbance and domain constraints of the form:

                    \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                    Fields

                    • A – state matrix
                    • D – noise matrix
                    • X – state constraints
                    • W – disturbance set
                    source
                    NoisyLinearControlDiscreteSystem

                    Continuous-time linear control system with additive disturbance of the form:

                    \[ x_{k+1} = A x_k + B u_k + D w_k \; \forall k.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • D – noise matrix
                    source
                    NoisyConstrainedLinearControlDiscreteSystem

                    Continuous-time linear control system with additive disturbance and domain constraints of the form:

                    \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • D – noise matrix
                    • X – state constraints
                    • U – input constraints
                    • W – disturbance set
                    source
                    NoisyAffineControlDiscreteSystem

                    Continuous-time affine control system with additive disturbance of the form:

                    \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • c – affine term
                    • D – noise matrix
                    source
                    NoisyConstrainedAffineControlDiscreteSystem

                    Continuous-time affine control system with additive disturbance and domain constraints of the form:

                    \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                    Fields

                    • A – state matrix
                    • B – input matrix
                    • c – affine term
                    • D – noise matrix
                    • X – state constraints
                    • U – input constraints
                    • W – disturbance set
                    source
                    NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                    Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                    \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • inputdim – number of input variables
                    • noisedim – number of noise variables
                    source
                    NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                    Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                    \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                    Fields

                    • f – function that holds the right-hand side
                    • statedim – number of state variables
                    • inputdim – number of input variables
                    • noisedim – number of noise variables
                    • X – state constraints
                    • U – input constraints
                    • W – disturbance set
                    source

                    Discretization Algorithms

                    AbstractDiscretizationAlgorithm

                    Abstract supertype for all discretization algorithms.

                    Note

                    For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                    _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                    +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                    are required.

                    source
                    ExactDiscretization <: AbstractDiscretizationAlgorithm

                    Exact discretization algorithm for affine systems.

                    Algorithm

                    This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                    Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                    The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                    The algorithm described above is a well known result from the literature [1].

                    [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                    source
                    EulerDiscretization <: AbstractDiscretizationAlgorithm

                    Euler discretization algorithm for affine systems.

                    Algorithm

                    This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                    Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                    The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                    The algorithm described above is a well known result from the literature [1].

                    [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                    source

                    System macro

                    system(expr...)

                    Return an instance of the system type corresponding to the given expressions.

                    Input

                    • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                    Output

                    A system that best matches the given expressions.

                    Notes

                    Terms. The expression expr contains one or more of the following sub-expressions:

                    • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                    • set constraints, e.g. x ∈ X
                    • input constraints, e.g. u ∈ U
                    • dimensionality, e.g. dim: (2,1) or dim = 1
                    • specification of the input variable, e.g. input: u or input = u
                    • specification of the noise variable, e,g, noise: w or noise = w

                    The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                    @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                    The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                    Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                    Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                    Exceptions. The following exceptions and particular cases apply:

                    • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                    • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                    • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                    Examples

                    Let us first create a continuous linear system using this macro:

                    julia> A = [1. 0; 0 1.];
                    +
                    +julia> @system(x' = A*x)
                    +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                    A discrete system is defined by using :

                    julia> @system(x⁺ = A*x)
                    +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                    Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                    julia> using LazySets
                    +
                    +julia> B = Matrix([1. 0.5]');
                    +
                    +julia> c = [1., 1.5];
                    +
                    +julia> X = BallInf(zeros(2), 10.);
                    +
                    +julia> U = BallInf(zeros(1), 2.);
                    +
                    +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                    +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                    For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                    julia> f(x, u) = x + u;
                    +
                    +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                    +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                    source

                    Initial-value problem macro

                    ivp(expr...)

                    Return an instance of the initial-value problem type corresponding to the given expressions.

                    Input

                    • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                    Output

                    An initial-value problem that best matches the given expressions.

                    Notes

                    This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                    Examples

                    julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                    +
                    +julia> typeof(p)
                    +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                    +
                    +julia> initial_state(p)
                    +1-element Array{Float64,1}:
                    + 1.0
                    source

                    Identity operator

                    IdentityMultiple{T} < AbstractMatrix{T} where T

                    A scalar multiple of the identity matrix of given order and numeric type.

                    Fields

                    • M – uniform scaling operator of type T
                    • n – size of the identity matrix

                    Notes

                    This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                    Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                    The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                    Examples

                    The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                    julia> using MathematicalSystems: IdentityMultiple
                    +
                    +julia> I2 = I(2)
                    +IdentityMultiple{Float64} of value 1.0 and order 2
                    +
                    +julia> I2 + I2
                    +IdentityMultiple{Float64} of value 2.0 and order 2
                    +
                    +julia> 4*I2
                    +IdentityMultiple{Float64} of value 4.0 and order 2

                    The numeric type (default Float64) can be passed as a second argument:

                    julia> I2r = I(2, Rational{Int})
                    +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                    +
                    +julia> I2r + I2r
                    +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                    +
                    +julia> 4*I2r
                    +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                    To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                    julia> I2 = I(2.0, 2)
                    +IdentityMultiple{Float64} of value 2.0 and order 2
                    +
                    +julia> I2r = I(2//1, 2)
                    +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                    Or use the constructor passing the UniformScaling (I):

                    julia> I2 = IdentityMultiple(2.0*I, 2)
                    +IdentityMultiple{Float64} of value 2.0 and order 2
                    +
                    +julia> I2r = IdentityMultiple(2//1*I, 2)
                    +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                    source

                    Initial Value Problems

                    InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                    Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                    Fields

                    • s – system
                    • x0 – initial state

                    Examples

                    The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                    julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                    +
                    +julia> x₀ = [-1/2, 1/2];
                    +
                    +julia> p = InitialValueProblem(s, x₀);
                    +
                    +julia> initial_state(p) # same as p.x0
                    +2-element Array{Float64,1}:
                    + -0.5
                    +  0.5
                    +
                    +julia> statedim(p)
                    +2
                    +
                    +julia> inputdim(p)
                    +0
                    source
                    IVP

                    IVP is an alias for InitialValueProblem.

                    source
                    initial_state(ivp::InitialValueProblem)

                    Return the initial state of an initial-value problem.

                    Input

                    • ivp – initial-value problem

                    Output

                    The initial state of an initial-value problem.

                    source
                    system(ivp::InitialValueProblem)

                    Return the system wrapped by an initial-value problem.

                    Input

                    • ivp – initial-value problem

                    Output

                    The system of the given initial-value problem.

                    source

                    Input Types

                    AbstractInput

                    Abstract supertype for all input types.

                    Notes

                    The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                    Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                    A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                    source
                    ConstantInput{UT} <: AbstractInput

                    Type representing an input that remains constant in time.

                    Fields

                    • U – input set

                    Examples

                    The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                    julia> c = ConstantInput(-1//2)
                    +ConstantInput{Rational{Int64}}(-1//2)
                    +
                    +julia> iterate(c, 1)
                    +(-1//2, nothing)
                    +
                    +julia> iterate(c, 2)
                    +(-1//2, nothing)
                    +
                    +julia> collect(nextinput(c, 4))
                    +4-element Array{Rational{Int64},1}:
                    + -1//2
                    + -1//2
                    + -1//2
                    + -1//2

                    The elements of this input are rational numbers:

                    julia> eltype(c)
                    +Rational{Int64}

                    To transform a constant input, you can use map as in:

                    julia> map(x->2*x, c)
                    +ConstantInput{Rational{Int64}}(-1//1)
                    source
                    VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                    Type representing an input that may vary with time.

                    Fields

                    • U – vector of input sets

                    Examples

                    The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                    julia> v = VaryingInput([-1//2, 1//2])
                    +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                    +
                    +julia> length(v)
                    +2
                    +
                    +julia> eltype(v)
                    +Rational{Int64}

                    Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                    julia> iterate(v, 1)
                    +(-1//2, 2)
                    +
                    +julia> iterate(v, 2)
                    +(1//2, 3)

                    The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                    julia> typeof(nextinput(v))
                    +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                    +
                    +julia> collect(nextinput(v, 1))
                    +1-element Array{Rational{Int64},1}:
                    + -1//2
                    +
                    +julia> collect(nextinput(v, 2))
                    +2-element Array{Rational{Int64},1}:
                    + -1//2
                    +  1//2

                    You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                    julia> collect(v)
                    +2-element Array{Rational{Int64},1}:
                    + -1//2
                    +  1//2
                    +
                    +julia> [2*vi for vi in v]
                    +2-element Array{Rational{Int64},1}:
                    + -1//1
                    +  1//1

                    Since this input type is finite, querying more elements than its length returns the full vector:

                    julia> collect(nextinput(v, 4))
                    +2-element Array{Rational{Int64},1}:
                    + -1//2
                    +  1//2

                    To transform a varying input, you can use map as in:

                    julia> map(x->2*x, v)
                    +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                    source

                    Maps

                    AbstractMap

                    Abstract supertype for all map types.

                    source
                    IdentityMap

                    An identity map,

                    \[ x ↦ x.\]

                    Fields

                    • dim – dimension
                    source
                    ConstrainedIdentityMap

                    An identity map with state constraints of the form:

                    \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                    Fields

                    • dim – dimension
                    • X – state constraints
                    source
                    LinearMap

                    A linear map,

                    \[ x ↦ Ax\]

                    Fields

                    • A – matrix
                    source
                    ConstrainedLinearMap

                    A linear map with state constraints of the form:

                    \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                    Fields

                    • A – matrix
                    • X – state constraints
                    source
                    AffineMap

                    An affine map,

                    \[ x ↦ Ax + c.\]

                    Fields

                    • A – matrix
                    • c – vector
                    source
                    ConstrainedAffineMap

                    An affine map with state constraints of the form:

                    \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                    Fields

                    • A – matrix
                    • c – vector
                    • X – state constraints
                    source
                    LinearControlMap

                    A linear control map,

                    \[ (x, u) ↦ Ax + Bu.\]

                    Fields

                    • A – matrix
                    • B – matrix
                    source
                    ConstrainedLinearControlMap

                    A linear control map with state and input constraints,

                    \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                    Fields

                    • A – matrix
                    • B – matrix
                    • X – state constraints
                    • U – input constraints
                    source
                    AffineControlMap

                    An affine control map,

                    \[ (x, u) ↦ Ax + Bu + c.\]

                    Fields

                    • A – matrix
                    • B – matrix
                    • c – vector
                    source
                    ConstrainedAffineControlMap

                    An affine control map with state and input constraints,

                    \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                    Fields

                    • A – matrix
                    • B – matrix
                    • c – vector
                    • X – state constraints
                    • U – input constraints
                    source
                    ResetMap

                    A reset map,

                    \[ x ↦ R(x),\]

                    such that a subset of the variables is given a specified value, and the rest are unchanged.

                    Fields

                    • dim – dimension
                    • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                    source
                    ConstrainedResetMap

                    A reset map with state constraints of the form:

                    \[ x ↦ R(x), x ∈ \mathcal{X},\]

                    such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                    Fields

                    • dim – dimension
                    • X – state constraints
                    • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                    source

                    Macros

                    map(ex, args)

                    Return an instance of the map type corresponding to the given expression.

                    Input

                    • ex – an expression defining the map, in the form of an anonymous function
                    • args – additional optional arguments

                    Output

                    A map that best matches the given expression.

                    Examples

                    Let us first create a linear map using this macro:

                    julia> @map x -> [1 0; 0 0]*x
                    +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                    We can create an affine system as well:

                    julia> @map x -> [1 0; 0 0]*x + [2, 0]
                    +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                    Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                    julia> @map(x -> x, dim=5)
                    +IdentityMap(5)

                    An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                    julia> @map x -> I(5)*x
                    +IdentityMap(5)
                    source

                    Systems with output

                    SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                    Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                    Fields

                    • s – system of type ST
                    • outputmap – output map of type MT
                    source
                    LinearTimeInvariantSystem(A, B, C, D)

                    A linear time-invariant system with of the form

                    \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                    Input

                    • A – matrix
                    • B – matrix
                    • C – matrix
                    • D – matrix

                    Output

                    A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                    source
                    LinearTimeInvariantSystem(A, B, C, D, X, U)

                    A linear time-invariant system with state and input constraints of the form

                    \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                    where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                    Input

                    • A – matrix
                    • B – matrix
                    • C – matrix
                    • D – matrix
                    • X – state constraints
                    • U – input constraints

                    Output

                    A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                    source
                    LTISystem

                    LTISystem is an alias for LinearTimeInvariantSystem.

                    source
                    diff --git a/v0.11.2/search/index.html b/v0.11.2/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.2/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                    Search

                    Search

                    Number of results: loading...

                      diff --git a/v0.11.2/search_index.js b/v0.11.2/search_index.js new file mode 100644 index 00000000..ec99e837 --- /dev/null +++ b/v0.11.2/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro-1","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s3} where #s3<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.2/siteinfo.js b/v0.11.2/siteinfo.js new file mode 100644 index 00000000..006f9529 --- /dev/null +++ b/v0.11.2/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.2"; diff --git a/v0.11.3/about/index.html b/v0.11.3/about/index.html new file mode 100644 index 00000000..53f1576e --- /dev/null +++ b/v0.11.3/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                      About

                      About

                      This page contains some general information about this project, and recommendations about contributing.

                      Contributing

                      If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                      Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                      Branches and pull requests (PR)

                      We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                      Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                      Unit testing and continuous integration (CI)

                      This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                      When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                      $ julia --color=yes test/runtests.jl

                      Alternatively, you can achieve the same from inside the REPL using the following command:

                      julia> Pkg.test("MathematicalSystems")

                      We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                      Contributing to the documentation

                      New functions and types should be documented according to our guidelines directly in the source code.

                      You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                      julia> ?LinearContinuousSystem

                      This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                      To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                      $ julia --color=yes docs/make.jl

                      Note that this also runs all doctests which will take some time.

                      Related projects

                      This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                      Below we list more related projects.

                      Package nameDescription
                      HybridSystems.jlHybrid Systems definitions in Julia.
                      LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                      ControlToolbox.jlAnalysis and design tools for control systems.
                      ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                      DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                      ControlSystems.jlA Control Systems Toolbox for Julia
                      ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                      Credits

                      These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                      diff --git a/v0.11.3/assets/arrow.svg b/v0.11.3/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.3/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.3/assets/documenter.css b/v0.11.3/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.3/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                      the is very first thing on the page (i.e. the second element + * in the
                      , * after the
                      , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                       surrounding the , while
                      + * highlight.js applies the .hljs style directly to the  tag.
                      + */
                      +.hljs {
                      +    background-color: transparent;
                      +    padding: 0;
                      +}
                      +
                      +@media only screen and (max-width: 768px) {
                      +    nav.toc {
                      +        position: fixed;
                      +        width: 16em;
                      +        left: -16em;
                      +        -webkit-overflow-scrolling: touch;
                      +        -webkit-transition-property: left; /* Safari */
                      +        -webkit-transition-duration: 0.3s; /* Safari */
                      +        transition-property: left;
                      +        transition-duration: 0.3s;
                      +        -webkit-transition-timing-function: ease-out; /* Safari */
                      +        transition-timing-function: ease-out;
                      +        z-index: 2;
                      +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                      +    }
                      +
                      +    nav.toc.show {
                      +        left: 0;
                      +    }
                      +
                      +    article {
                      +        margin-left: 0;
                      +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                      +        overflow-wrap: break-word;
                      +    }
                      +
                      +    article > header {
                      +        position: fixed;
                      +        left: 0;
                      +        z-index: 1;
                      +    }
                      +
                      +    article > header nav, hr {
                      +        display: none;
                      +    }
                      +
                      +    article > header div#topbar {
                      +        display: block; /* is mobile */
                      +        position: fixed;
                      +        width: 100%;
                      +        height: 1.5em;
                      +        padding-top: 1em;
                      +        padding-bottom: 1em;
                      +        background-color: #fcfcfc;
                      +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                      +        top: 0;
                      +        -webkit-transition-property: top; /* Safari */
                      +        -webkit-transition-duration: 0.3s; /* Safari */
                      +        transition-property: top;
                      +        transition-duration: 0.3s;
                      +    }
                      +
                      +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                      +        top: -4em;
                      +        -webkit-transition-property: top; /* Safari */
                      +        -webkit-transition-duration: 0.7s; /* Safari */
                      +        transition-property: top;
                      +        transition-duration: 0.7s;
                      +    }
                      +
                      +    article > header div#topbar span {
                      +        width: 80%;
                      +        height: 1.5em;
                      +        margin-top: -0.1em;
                      +        margin-left: 0.9em;
                      +        font-size: 1.2em;
                      +        overflow: hidden;
                      +    }
                      +
                      +    article > header div#topbar a.fa-bars {
                      +        float: right;
                      +        padding: 0.6em;
                      +        margin-top: -0.6em;
                      +        margin-right: 0.3em;
                      +        font-size: 1.5em;
                      +    }
                      +
                      +    article > header div#topbar a.fa-bars:visited {
                      +        color: #3091d1;
                      +    }
                      +
                      +    article table {
                      +        overflow-x: auto;
                      +        display: block;
                      +    }
                      +
                      +    article div.MathJax_Display {
                      +        overflow: scroll;
                      +    }
                      +
                      +    article span.MathJax {
                      +        overflow: hidden;
                      +    }
                      +}
                      +
                      +@media only screen and (max-width: 320px) {
                      +    body {
                      +        font-size: 15px;
                      +    }
                      +}
                      diff --git a/v0.11.3/assets/documenter.js b/v0.11.3/assets/documenter.js
                      new file mode 100644
                      index 00000000..761ae294
                      --- /dev/null
                      +++ b/v0.11.3/assets/documenter.js
                      @@ -0,0 +1,132 @@
                      +/*
                      + * Part of Documenter.jl
                      + *     https://github.com/JuliaDocs/Documenter.jl
                      + *
                      + * License: MIT
                      + */
                      +
                      +requirejs.config({
                      +    paths: {
                      +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                      +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                      +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                      +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                      +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                      +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                      +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                      +    },
                      +    shim: {
                      +        'mathjax' : {
                      +            exports: "MathJax"
                      +        },
                      +        'highlight-julia': ['highlight'],
                      +        'highlight-julia-repl': ['highlight'],
                      +    }
                      +});
                      +
                      +// Load MathJax
                      +require(['mathjax'], function(MathJax) {
                      +    MathJax.Hub.Config({
                      +      "tex2jax": {
                      +        inlineMath: [['$','$'], ['\\(','\\)']],
                      +        processEscapes: true
                      +      }
                      +    });
                      +    MathJax.Hub.Config({
                      +      config: ["MMLorHTML.js"],
                      +      jax: [
                      +        "input/TeX",
                      +        "output/HTML-CSS",
                      +        "output/NativeMML"
                      +      ],
                      +      extensions: [
                      +        "MathMenu.js",
                      +        "MathZoom.js",
                      +        "TeX/AMSmath.js",
                      +        "TeX/AMSsymbols.js",
                      +        "TeX/autobold.js",
                      +        "TeX/autoload-all.js"
                      +      ]
                      +    });
                      +    MathJax.Hub.Config({
                      +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                      +    });
                      +})
                      +
                      +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                      +    $(document).ready(function() {
                      +        hljs.initHighlighting();
                      +    })
                      +
                      +})
                      +
                      +// update the version selector with info from the siteinfo.js and ../versions.js files
                      +require(['jquery'], function($) {
                      +    $(document).ready(function() {
                      +        var version_selector = $("#version-selector");
                      +
                      +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                      +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                      +            var option = $("");
                      +            version_selector.append(option);
                      +        }
                      +
                      +        if (typeof DOC_VERSIONS !== 'undefined') {
                      +            var existing_versions = $('#version-selector > option');
                      +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                      +            DOC_VERSIONS.forEach(function(each) {
                      +                var version_url = documenterBaseURL + "/../" + each;
                      +                var existing_id = $.inArray(each, existing_versions_texts);
                      +                // if not already in the version selector, add it as a new option,
                      +                // otherwise update the old option with the URL and enable it
                      +                if (existing_id == -1) {
                      +                    var option = $("");
                      +                    version_selector.append(option);
                      +                } else {
                      +                    var option = existing_versions[existing_id];
                      +                    option.value = version_url;
                      +                    option.disabled = false;
                      +                }
                      +            });
                      +        }
                      +
                      +        // only show the version selector if the selector has been populated
                      +        if ($('#version-selector > option').length > 0) {
                      +            version_selector.css("visibility", "visible");
                      +        }
                      +
                      +        // Scroll the navigation bar to the currently selected menu item
                      +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                      +    })
                      +
                      +})
                      +
                      +// mobile
                      +require(['jquery', 'headroom'], function($, Headroom) {
                      +    $(document).ready(function() {
                      +        var navtoc = $("nav.toc");
                      +        $("nav.toc li.current a.toctext").click(function() {
                      +            navtoc.toggleClass('show');
                      +        });
                      +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                      +            ev.preventDefault();
                      +            navtoc.toggleClass('show');
                      +            if (navtoc.hasClass('show')) {
                      +                var title = $("article > header div#topbar span").text();
                      +                $("nav.toc ul li a:contains('" + title + "')").focus();
                      +            }
                      +        });
                      +        $("article#docs").bind('click', function(ev) {
                      +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                      +                return;
                      +            }
                      +            if (navtoc.hasClass('show')) {
                      +                navtoc.removeClass('show');
                      +            }
                      +        });
                      +        if ($("article > header div#topbar").css('display') == 'block') {
                      +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                      +            headroom.init();
                      +        }
                      +    })
                      +})
                      diff --git a/v0.11.3/assets/juliareach.css b/v0.11.3/assets/juliareach.css
                      new file mode 100644
                      index 00000000..64b0d92d
                      --- /dev/null
                      +++ b/v0.11.3/assets/juliareach.css
                      @@ -0,0 +1,583 @@
                      +/*
                      + * The default CSS style for Documenter.jl generated sites
                      + *
                      + * Heavily inspired by the Julia Sphinx theme
                      + *     https://github.com/JuliaLang/JuliaDoc
                      + * which extends the sphinx_rtd_theme
                      + *     https://github.com/snide/sphinx_rtd_theme
                      + *
                      + * Part of Documenter.jl
                      + *     https://github.com/JuliaDocs/Documenter.jl
                      + *
                      + * License: MIT
                      + */
                      +
                      +/* The original CSS is modified such that it right-justifies the text. */
                      +
                      +/* fonts */
                      +body, input {
                      +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                      +  font-size: 16px;
                      +  color: #222;
                      +  text-rendering: optimizeLegibility;
                      +}
                      +
                      +pre, code, kbd {
                      +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                      +  font-size: 0.90em;
                      +}
                      +
                      +pre code {
                      +  font-size: 1em;
                      +}
                      +
                      +a {
                      +    color: #2980b9;
                      +    text-decoration: none;
                      +}
                      +
                      +a:hover {
                      +    color: #3091d1;
                      +}
                      +
                      +a:visited {
                      +    color: #9b59b6;
                      +}
                      +
                      +body {
                      +    line-height: 1.5;
                      +}
                      +
                      +h1 {
                      +    font-size: 1.75em;
                      +}
                      +
                      +/* Unless the 

                      the is very first thing on the page (i.e. the second element + * in the
                      , * after the
                      , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                       surrounding the , while
                      + * highlight.js applies the .hljs style directly to the  tag.
                      + */
                      +.hljs {
                      +    background-color: transparent;
                      +    padding: 0;
                      +}
                      +
                      +@media only screen and (max-width: 768px) {
                      +    nav.toc {
                      +        position: fixed;
                      +        overflow-y: scroll;
                      +        width: 16em;
                      +        left: -16em;
                      +        -webkit-overflow-scrolling: touch;
                      +        -webkit-transition-property: left; /* Safari */
                      +        -webkit-transition-duration: 0.3s; /* Safari */
                      +        transition-property: left;
                      +        transition-duration: 0.3s;
                      +        -webkit-transition-timing-function: ease-out; /* Safari */
                      +        transition-timing-function: ease-out;
                      +        z-index: 2;
                      +    }
                      +
                      +    nav.toc.show {
                      +        left: 0;
                      +    }
                      +
                      +    article {
                      +        margin-left: 0;
                      +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                      +        overflow-wrap: break-word;
                      +    }
                      +
                      +    article > header {
                      +        position: fixed;
                      +        left: 0;
                      +        z-index: 1;
                      +    }
                      +
                      +    article > header nav, hr {
                      +        display: none;
                      +    }
                      +
                      +    article > header div#topbar {
                      +        display: block; /* is mobile */
                      +        position: fixed;
                      +        width: 100%;
                      +        height: 1.5em;
                      +        padding-top: 1em;
                      +        padding-bottom: 1em;
                      +        background-color: #fcfcfc;
                      +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                      +        top: 0;
                      +        -webkit-transition-property: top; /* Safari */
                      +        -webkit-transition-duration: 0.3s; /* Safari */
                      +        transition-property: top;
                      +        transition-duration: 0.3s;
                      +    }
                      +
                      +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                      +        top: -4em;
                      +        -webkit-transition-property: top; /* Safari */
                      +        -webkit-transition-duration: 0.7s; /* Safari */
                      +        transition-property: top;
                      +        transition-duration: 0.7s;
                      +    }
                      +
                      +    article > header div#topbar span {
                      +        position: fixed;
                      +        width: 80%;
                      +        height: 1.5em;
                      +        margin-top: -0.1em;
                      +        margin-left: 0.9em;
                      +        font-size: 1.2em;
                      +        overflow: hidden;
                      +    }
                      +
                      +    article > header div#topbar a.fa-bars {
                      +        float: right;
                      +        padding: 0.6em;
                      +        margin-top: -0.6em;
                      +        margin-right: 0.3em;
                      +        font-size: 1.5em;
                      +    }
                      +
                      +    article > header div#topbar a.fa-bars:visited {
                      +        color: #3091d1;
                      +    }
                      +
                      +    article table {
                      +        overflow-x: auto;
                      +        display: block;
                      +    }
                      +
                      +    article div.MathJax_Display {
                      +        overflow: scroll;
                      +    }
                      +
                      +    article span.MathJax {
                      +        overflow: hidden;
                      +    }
                      +}
                      +
                      +@media only screen and (max-width: 320px) {
                      +    body {
                      +        font-size: 15px;
                      +    }
                      +}
                      diff --git a/v0.11.3/assets/search.js b/v0.11.3/assets/search.js
                      new file mode 100644
                      index 00000000..5d32c3aa
                      --- /dev/null
                      +++ b/v0.11.3/assets/search.js
                      @@ -0,0 +1,250 @@
                      +/*
                      + * Part of Documenter.jl
                      + *     https://github.com/JuliaDocs/Documenter.jl
                      + *
                      + * License: MIT
                      + */
                      +
                      +// parseUri 1.2.2
                      +// (c) Steven Levithan 
                      +// MIT License
                      +function parseUri (str) {
                      +	var	o   = parseUri.options,
                      +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                      +		uri = {},
                      +		i   = 14;
                      +
                      +	while (i--) uri[o.key[i]] = m[i] || "";
                      +
                      +	uri[o.q.name] = {};
                      +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                      +		if ($1) uri[o.q.name][$1] = $2;
                      +	});
                      +
                      +	return uri;
                      +};
                      +parseUri.options = {
                      +	strictMode: false,
                      +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                      +	q:   {
                      +		name:   "queryKey",
                      +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                      +	},
                      +	parser: {
                      +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                      +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                      +	}
                      +};
                      +
                      +requirejs.config({
                      +    paths: {
                      +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                      +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                      +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                      +    }
                      +});
                      +
                      +var currentScript = document.currentScript;
                      +
                      +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                      +    $("#search-form").submit(function(e) {
                      +        e.preventDefault()
                      +    })
                      +
                      +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                      +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                      +    // ideally we'd just filter the original list but it's not available as a variable
                      +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                      +        'a',
                      +        'able',
                      +        'about',
                      +        'across',
                      +        'after',
                      +        'almost',
                      +        'also',
                      +        'am',
                      +        'among',
                      +        'an',
                      +        'and',
                      +        'are',
                      +        'as',
                      +        'at',
                      +        'be',
                      +        'because',
                      +        'been',
                      +        'but',
                      +        'by',
                      +        'can',
                      +        'cannot',
                      +        'could',
                      +        'dear',
                      +        'did',
                      +        'does',
                      +        'either',
                      +        'ever',
                      +        'every',
                      +        'from',
                      +        'got',
                      +        'had',
                      +        'has',
                      +        'have',
                      +        'he',
                      +        'her',
                      +        'hers',
                      +        'him',
                      +        'his',
                      +        'how',
                      +        'however',
                      +        'i',
                      +        'if',
                      +        'into',
                      +        'it',
                      +        'its',
                      +        'just',
                      +        'least',
                      +        'like',
                      +        'likely',
                      +        'may',
                      +        'me',
                      +        'might',
                      +        'most',
                      +        'must',
                      +        'my',
                      +        'neither',
                      +        'no',
                      +        'nor',
                      +        'not',
                      +        'of',
                      +        'off',
                      +        'often',
                      +        'on',
                      +        'only',
                      +        'or',
                      +        'other',
                      +        'our',
                      +        'own',
                      +        'rather',
                      +        'said',
                      +        'say',
                      +        'says',
                      +        'she',
                      +        'should',
                      +        'since',
                      +        'so',
                      +        'some',
                      +        'than',
                      +        'that',
                      +        'the',
                      +        'their',
                      +        'them',
                      +        'then',
                      +        'there',
                      +        'these',
                      +        'they',
                      +        'this',
                      +        'tis',
                      +        'to',
                      +        'too',
                      +        'twas',
                      +        'us',
                      +        'wants',
                      +        'was',
                      +        'we',
                      +        'were',
                      +        'what',
                      +        'when',
                      +        'who',
                      +        'whom',
                      +        'why',
                      +        'will',
                      +        'would',
                      +        'yet',
                      +        'you',
                      +        'your'
                      +        ])
                      +
                      +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                      +    // would not find anything if searching for "add!", only for the entire qualification
                      +    lunr.tokenizer.separator = /[\s\-\.]+/
                      +
                      +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                      +    lunr.trimmer = function (token) {
                      +        return token.update(function (s) {
                      +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                      +        })
                      +    }
                      +
                      +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                      +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                      +
                      +    var index = lunr(function () {
                      +        this.ref('location')
                      +        this.field('title')
                      +        this.field('text')
                      +        documenterSearchIndex['docs'].forEach(function(e) {
                      +            this.add(e)
                      +        }, this)
                      +    })
                      +    var store = {}
                      +
                      +    documenterSearchIndex['docs'].forEach(function(e) {
                      +        store[e.location] = {title: e.title, category: e.category}
                      +    })
                      +
                      +    $(function(){
                      +        function update_search(querystring) {
                      +            tokens = lunr.tokenizer(querystring)
                      +            results = index.query(function (q) {
                      +                tokens.forEach(function (t) {
                      +                    q.term(t.toString(), {
                      +                        fields: ["title"],
                      +                        boost: 100,
                      +                        usePipeline: false,
                      +                        editDistance: 0,
                      +                        wildcard: lunr.Query.wildcard.NONE
                      +                    })
                      +                    q.term(t.toString(), {
                      +                        fields: ["title"],
                      +                        boost: 10,
                      +                        usePipeline: false,
                      +                        editDistance: 2,
                      +                        wildcard: lunr.Query.wildcard.NONE
                      +                    })
                      +                    q.term(t.toString(), {
                      +                        fields: ["text"],
                      +                        boost: 1,
                      +                        usePipeline: true,
                      +                        editDistance: 0,
                      +                        wildcard: lunr.Query.wildcard.NONE
                      +                    })
                      +                })
                      +            })
                      +            $('#search-info').text("Number of results: " + results.length)
                      +            $('#search-results').empty()
                      +            results.forEach(function(result) {
                      +                data = store[result.ref]
                      +                link = $('')
                      +                link.text(data.title)
                      +                link.attr('href', documenterBaseURL+'/'+result.ref)
                      +                cat = $('('+data.category+')')
                      +                li = $('
                    • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.3/index.html b/v0.11.3/index.html new file mode 100644 index 00000000..8623032d --- /dev/null +++ b/v0.11.3/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                      Home

                      MathematicalSystems.jl

                      MathematicalSystems is a Julia package for mathematical systems interfaces.

                      Features

                      • Generic and flexible systems definitions, while being fast and type stable.
                      • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                      • Iterator interfaces to handle constant or time-varying inputs.

                      Library Outline

                      diff --git a/v0.11.3/lib/internals/index.html b/v0.11.3/lib/internals/index.html new file mode 100644 index 00000000..caaa0dad --- /dev/null +++ b/v0.11.3/lib/internals/index.html @@ -0,0 +1,55 @@ + +Internals · MathematicalSystems.jl

                      Internals

                      Internals

                      This section describes functions that are internal to the library.

                      Expression handling

                      _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                      Return the system type whose field names match those in fields.

                      Input

                      • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                      • fields – tuple of field names

                      Output

                      The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                      Examples

                      julia> using MathematicalSystems: _corresponding_type
                      +
                      +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                      +LinearContinuousSystem
                      +
                      +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                      +ConstrainedLinearControlContinuousSystem
                      source
                      _capture_dim(expr)

                      Return the tuple containing the dimension(s) in expr.

                      Input

                      • expr – symbolic expression that can be of any of the following forms:

                        • :x or :(x) – state dimension
                        • :(x, u) – state and input dimension
                        • :(x, u, w) – state, input and noise dimensions

                      Output

                      • The scalar x if expr specifies the state dimension.
                      • The vector [x, u] if expr specifies state and input dimension.
                      • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                      source
                      extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                      Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                      For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                      • (:A_user, :A)
                      • (:B_user, :B)
                      • (:c_user, :c)
                      • (:D_user, :D)
                      • (:f_user, :f)
                      • (:statedim_user :statedim)
                      • (:inputdim_user :inputdim)
                      • (:noisedim_user :noisedim)

                      and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                      Input

                      • equation – dynamic equation
                      • state – state variable
                      • input – input variable
                      • noise – noise variable
                      • dim – dimensionality
                      • AT – abstract system type

                      Output

                      Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                      source
                      add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                      Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                      Input

                      • summand – expressions
                      • state – state variable
                      • input – input variable
                      • noise – noise variable

                      Output

                      Multiplication expression or symbol.

                      Example

                      julia> using MathematicalSystems: add_asterisk
                      +
                      +julia> add_asterisk(:(A1*x), :x, :u, :w)
                      +:(A1 * x)
                      +
                      +julia> add_asterisk(:(c1), :x, :u, :w)
                      +:c1
                      +
                      +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                      +:(A * x1)
                      +
                      +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                      +:(A * wb)
                      +
                      +julia> add_asterisk(:(A1u), :x, :u, :w)
                      +:(A1 * u)
                      +
                      +julia> add_asterisk(:(A1ub), :x, :u, :w)
                      +:A1ub
                      source
                      Base.sortFunction.
                      sort(parameters::Vector, order::Tuple)

                      Filter and sort the vector parameters according to order.

                      Input

                      • parameters – vector of tuples
                      • order – tuple of symbols

                      Output

                      A new vector of tuples corresponding to parameters filtered and sorted according to order.

                      Examples

                      julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                      +
                      +julia> sort(parameters, (:X, :U, :W))
                      +3-element Array{Tuple{Any,Symbol},1}:
                      + (:X1, :X)
                      + (:U1, :U)
                      + (:W1, :W)
                      +
                      +julia>  parameters = [(:const, :c), (:A, :A)];
                      +
                      +julia> sort(parameters, (:A, :B, :c, :D))
                      +2-element Array{Tuple{Any,Symbol},1}:
                      + (:A, :A)
                      + (:const, :c)

                      Notes

                      parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                      If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                      source

                      Querying expressions

                      is_equation(expr)

                      Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                      Input

                      • expr – expression

                      Output

                      A Bool indicating whether expr is an equation or not.

                      source
                      extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                      Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                      Input

                      • summands – array of expressions
                      • state – state variable
                      • input – input variable
                      • noise – noise variable

                      Output

                      Array of tuples of symbols with variable name and field name.

                      Example

                      julia> using MathematicalSystems: extract_sum
                      +
                      +julia> extract_sum([:(A1*x)], :x, :u, :w)
                      +1-element Array{Tuple{Any,Symbol},1}:
                      + (:(hcat(A1)), :A)
                      +
                      +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                      +3-element Array{Tuple{Any,Symbol},1}:
                      + (:(hcat(A1)), :A)
                      + (:(hcat(B1)), :B)
                      + (:(vcat(c)), :c)
                      +
                      +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                      +3-element Array{Tuple{Any,Symbol},1}:
                      + (:(hcat(A1)), :A)
                      + (:(hcat(B1)), :B)
                      + (:(hcat(B2)), :D)

                      Notes

                      If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                      If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                      Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                      source

                      Naming convention for systems' fields

                      Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                      FieldDescriptionGetter function
                      Astate matrixstate_matrix
                      Binput matrixinput_matrix
                      caffine termaffine_term
                      Dnoise matrixnoise_matrix
                      Xstate constraintsstateset
                      Uinput constraintsinputset
                      Wdisturbance setnoiseset
                      diff --git a/v0.11.3/lib/methods/index.html b/v0.11.3/lib/methods/index.html new file mode 100644 index 00000000..e44beacc --- /dev/null +++ b/v0.11.3/lib/methods/index.html @@ -0,0 +1,20 @@ + +Methods · MathematicalSystems.jl

                      Methods

                      Methods

                      This section describes systems methods implemented in MathematicalSystems.jl.

                      States

                      statedim(s::AbstractSystem)

                      Returns the dimension of the state space of system s.

                      source
                      stateset(s::AbstractSystem)

                      Returns the set of allowed states of system s.

                      source

                      Inputs

                      inputdim(s::AbstractSystem)

                      Returns the dimension of the input space of system s.

                      source
                      inputset(s::AbstractSystem)

                      Returns the set of allowed inputs of system s.

                      source
                      nextinput(input::ConstantInput, n::Int=1)

                      Returns the first n elements of this input.

                      Input

                      • input – a constant input
                      • n – (optional, default: 1) the number of desired elements

                      Output

                      A repeated iterator that generates n equal samples of this input.

                      source
                      nextinput(input::VaryingInput, n::Int=1)

                      Returns the first n elements of this input.

                      Input

                      • input – varying input
                      • n – (optional, default: 1) number of desired elements

                      Output

                      An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                      source

                      Output

                      outputdim(m::AbstractMap)

                      Returns the dimension of the output space of the map m.

                      source
                      outputmap(s::SystemWithOutput)

                      Returns the output map of a system with output.

                      source

                      Traits

                      islinear(s::AbstractSystem)

                      Specifies if the dynamics of system s is specified by linear equations.

                      Notes

                      We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                      The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                      [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                      source
                      islinear(m::AbstractMap)

                      Specifies if the map m is linear or not.

                      Notes

                      A map is linear if it preserves the operations of scalar multiplication and vector addition.

                      source
                      isaffine(s::AbstractSystem)

                      Specifies if the dynamics of system s is specified by affine equations.

                      Notes

                      An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                      The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                      source
                      ispolynomial(s::AbstractSystem)

                      Specifies if the dynamics of system s is specified by polynomial equations.

                      The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                      source
                      isaffine(m::AbstractMap)

                      Specifies if the map m is affine or not.

                      Notes

                      An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                      source
                      isnoisy(s::AbstractSystem)

                      Determines if the dynamics of system s contains a noise term w.

                      The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                      source
                      iscontrolled(s::AbstractSystem)

                      Determines if the dynamics of system s contains a control input u.

                      The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                      source
                      isconstrained(s::AbstractSystem)

                      Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                      The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                      source
                      state_matrix(::AbstractSystem)

                      Return the state matrix of an affine system.

                      Notes

                      The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                      source
                      input_matrix(::AbstractSystem)

                      Return the input matrix of a system with linear input.

                      Notes

                      The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                      source
                      noise_matrix(::AbstractSystem)

                      Return the noise matrix of a system with linear noise.

                      Notes

                      The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                      source
                      affine_term(::AbstractSystem)

                      Return the affine term in an affine system.

                      Notes

                      The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                      source

                      Maps

                      apply(m::AbstractMap, args...)

                      Apply the rule specified by the map to the given arguments.

                      source

                      Successor

                      successor(system::DiscreteIdentitySystem, x::AbstractVector)

                      Return the successor state of a DiscreteIdentitySystem.

                      Input

                      • systemDiscreteIdentitySystem
                      • x – state (it should be any vector type)

                      Output

                      The same state x.

                      source
                      successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                      +          [check_constraints]=true)

                      Return the successor state of a ConstrainedDiscreteIdentitySystem.

                      Input

                      • systemConstrainedDiscreteIdentitySystem
                      • x – state (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state belongs to the state set

                      Output

                      The same state x.

                      source
                      successor(system::LinearDiscreteSystem, x::AbstractVector)

                      Return the successor state of a LinearDiscreteSystem.

                      Input

                      • systemLinearDiscreteSystem
                      • x – state (it should be any vector type)

                      Output

                      The result of applying the system to x.

                      source
                      successor(system::AffineDiscreteSystem, x::AbstractVector)

                      Return the successor state of a AffineDiscreteSystem.

                      Input

                      • systemAffineDiscreteSystem
                      • x – state (it should be any vector type)

                      Output

                      The result of applying the system to x.

                      source
                      successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                      Return the successor state of a LinearControlDiscreteSystem.

                      Input

                      • systemLinearControlDiscreteSystem
                      • x – state (it should be any vector type)
                      • u – input (it should be any vector type)

                      Output

                      The result of applying the system to x, with input u.

                      source
                      successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                      +          [check_constraints]=true)

                      Return the successor state of a ConstrainedLinearDiscreteSystem.

                      Input

                      • systemConstrainedLinearDiscreteSystem
                      • x – state (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state belongs to the state set

                      Output

                      The result of applying the system to x.

                      source
                      successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                      +          [check_constraints])

                      Return the successor state of a ConstrainedAffineDiscreteSystem.

                      Input

                      • systemConstrainedAffineDiscreteSystem
                      • x – state (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state belongs to the state set

                      Output

                      The result of applying the system to x.

                      source
                      successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                      +          u::AbstractVector; [check_constraints]=true)

                      Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                      Input

                      • systemConstrainedLinearControlDiscreteSystem
                      • x – state (it should be any vector type)
                      • u – input (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                      Output

                      The result of applying the system to x, with input u.

                      source
                      successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                      +          u::AbstractVector; [check_constraints]=true)

                      Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                      Input

                      • systemConstrainedAffineControlDiscreteSystem
                      • x – state (it should be any vector type)
                      • u – input (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                      Output

                      The result of applying the system to x, with input u.

                      source
                      successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                      Return the successor state of a BlackBoxDiscreteSystem.

                      Input

                      • systemBlackBoxDiscreteSystem
                      • x – state (it should be any vector type)

                      Output

                      The result of applying the system to x.

                      source
                      successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                      +          [check_constraints]=true)

                      Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                      Input

                      • systemConstrainedBlackBoxDiscreteSystem
                      • x – state (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state belongs to the state set

                      Output

                      The result of applying the system to x.

                      source
                      successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                      +          u::AbstractVector; [check_constraints]=true)

                      Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                      Input

                      • systemConstrainedBlackBoxControlDiscreteSystem
                      • x – state (it should be any vector type)
                      • u – input (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state belongs to the state set

                      Output

                      The result of applying the system to x, with input u.

                      source
                      successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                      +          w::AbstractVector; [check_constraints]=true)

                      Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                      Input

                      • systemNoisyConstrainedLinearDiscreteSystem
                      • x – state (it should be any vector type)
                      • w – noise (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state belongs to the state set

                      Output

                      The result of applying the system to x, with noise w.

                      source
                      successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                      +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                      Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                      Input

                      • systemNoisyConstrainedLinearControlDiscreteSystem
                      • x – state (it should be any vector type)
                      • u – input (it should be any vector type)
                      • w – noise (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                      Output

                      The result of applying the system to x, with input u and noise w.

                      source
                      successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                      +          u::AbstractVector; [check_constraints]=true)

                      Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                      Input

                      • systemNoisyConstrainedAffineControlDiscreteSystem
                      • x – state (it should be any vector type)
                      • u – input (it should be any vector type)
                      • w – noise (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                      Output

                      The result of applying the system to x, with input u and noise w.

                      source
                      successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                      +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                      Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                      Input

                      • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                      • x – state (it should be any vector type)
                      • u – input (it should be any vector type)
                      • w – noise (it should be any vector type)
                      • check_constraints – (optional, default: true) check if the state belongs to the state set

                      Output

                      The result of applying the system to x, with input u and noise w.

                      source

                      Discretization

                      discretize(system::AbstractContinuousSystem, ΔT::Real,
                      +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                      +           constructor=_default_complementary_constructor(system))

                      Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                      Input

                      • system – an affine continuous system
                      • ΔT – sampling time
                      • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                      • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                      Output

                      Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                      source

                      Internal Methods

                      _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                      +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                      Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                      Input

                      • `` – discretization algorithm, used for dispatch
                      • ΔT – sampling time
                      • A – state matrix
                      • B – input matrix
                      • c – vector
                      • D – noise matrix

                      Output

                      Returns a vector containing the discretized input arguments A, B, c and D.

                      Notes

                      See discretize for more details.

                      source
                      _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                      Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                      Input

                      • A – state matrix
                      • ΔT – sampling time
                      • algorithm – (optional, default: :exact) discretization algorithm

                      Output

                      Returns a vector containing the discretized input argument A.

                      Notes

                      See discretize for more details.

                      source
                      _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                      +            A::AbstractMatrix, B::AbstractMatrix)

                      Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                      Input

                      • algorithm – discretization algorithm
                      • ΔT – sampling time
                      • A – state matrix
                      • B – input or noise matrix

                      Output

                      Returns a vector containing the discretized input arguments A and B.

                      Notes

                      This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                      See discretize for more details.

                      source
                      _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                      +            A::AbstractMatrix,c::AbstractVector)

                      Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                      Input

                      • algorithm – discretization algorithm
                      • ΔT – sampling time
                      • A – state matrix
                      • c – vector

                      Output

                      Returns a vector containing the discretized input arguments A and c.

                      Notes

                      See discretize for more details.

                      source
                      _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                      +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                      Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                      Input

                      • algorithm – discretization algorithm
                      • ΔT – sampling time
                      • A – state matrix
                      • B – input matrix
                      • c – vector

                      Output

                      Returns a vector containing the discretized input arguments A, B and c.

                      Notes

                      See discretize for more details.

                      source
                      _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                      +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                      Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                      Input

                      • algorithm – discretization algorithm
                      • ΔT – sampling time
                      • A – state matrix
                      • B – input matrix
                      • D – noise matrix

                      Output

                      Returns a vector containing the discretized input arguments A, B and D.

                      Notes

                      See discretize for more details.

                      source
                      typename(system::AbstractSystem)

                      Returns the base type of system without parameter information.

                      Input

                      • systemAbstractSystem

                      Output

                      The base type of system.

                      source
                      _complementary_type(system_type::Type{<:AbstractSystem})

                      Return the complementary type of a system type system_type.

                      Input

                      • system_type – type of AbstractSystem

                      Ouput

                      Return complementary type of system_type.

                      Notes

                      There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                      To get the complementary type of system type, use _complementary_type(typename(system)).

                      source
                      diff --git a/v0.11.3/lib/types/index.html b/v0.11.3/lib/types/index.html new file mode 100644 index 00000000..bb97f5e9 --- /dev/null +++ b/v0.11.3/lib/types/index.html @@ -0,0 +1,127 @@ + +Types · MathematicalSystems.jl

                      Types

                      Types

                      This section describes systems types implemented in MathematicalSystems.jl.

                      Abstract Systems

                      AbstractSystem

                      Abstract supertype for all system types.

                      source
                      AbstractContinuousSystem

                      Abstract supertype for all continuous system types.

                      source
                      AbstractDiscreteSystem

                      Abstract supertype for all discrete system types.

                      source

                      Continuous Systems

                      ContinuousIdentitySystem <: AbstractContinuousSystem

                      Trivial identity continuous-time system of the form:

                      \[ x(t)' = 0 \; \forall t.\]

                      Fields

                      • statedim – number of state variables
                      source
                      ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                      Trivial identity continuous-time system with domain constraints of the form:

                      \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                      Fields

                      • statedim – number of state variables
                      • X – state constraints
                      source
                      LinearContinuousSystem

                      Continuous-time linear system of the form:

                      \[ x(t)' = A x(t) \; \forall t.\]

                      Fields

                      • A – state matrix
                      source
                      AffineContinuousSystem

                      Continuous-time affine system of the form:

                      \[ x(t)' = A x(t) + c \; \forall t.\]

                      Fields

                      • A – state matrix
                      • c – affine term
                      source
                      LinearControlContinuousSystem

                      Continuous-time linear control system of the form:

                      \[ x(t)' = A x(t) + B u(t) \; \forall t.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      source
                      ConstrainedLinearContinuousSystem

                      Continuous-time linear system with domain constraints of the form:

                      \[ x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                      Fields

                      • A – state matrix
                      • X – state constraints
                      source
                      ConstrainedAffineContinuousSystem

                      Continuous-time affine system with domain constraints of the form:

                      \[ x(t)' = A x(t) + c, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                      Fields

                      • A – state matrix
                      • c – affine term
                      • X – state constraints
                      source
                      ConstrainedAffineControlContinuousSystem

                      Continuous-time affine control system with domain constraints of the form:

                      \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • c – affine term
                      • X – state constraints
                      • U – input constraints
                      source
                      ConstrainedLinearControlContinuousSystem

                      Continuous-time linear control system with domain constraints of the form:

                      \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • X – state constraints
                      • U – input constraints
                      source
                      LinearAlgebraicContinuousSystem

                      Continuous-time linear algebraic system of the form:

                      \[ E x(t)' = A x(t) \; \forall t.\]

                      Fields

                      • A – state matrix
                      • E – matrix, same size as A
                      source
                      ConstrainedLinearAlgebraicContinuousSystem

                      Continuous-time linear system with domain constraints of the form:

                      \[ E x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                      Fields

                      • A – state matrix
                      • E – matrix, same size as A
                      • X – state constraints
                      source
                      PolynomialContinuousSystem

                      Continuous-time polynomial system of the form:

                      \[ x(t)' = p(x(t)) \; \forall t.\]

                      Fields

                      • p – polynomial vector field
                      • statedim – number of state variables
                      source
                      ConstrainedPolynomialContinuousSystem

                      Continuous-time polynomial system with domain constraints:

                      \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                      Fields

                      • p – polynomial vector field
                      • X – constraint set
                      • statedim – number of state variables
                      source
                      BlackBoxContinuousSystem <: AbstractContinuousSystem

                      Continuous-time system defined by a right-hand side of the form:

                      \[ x(t)' = f(x(t)) \; \forall t.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      source
                      ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                      Continuous-time system defined by a right-hand side with domain constraints of the form:

                      \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • X – state constraints
                      source
                      BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                      Continuous-time control system defined by a right-hand side of the form:

                      \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • inputdim – number of input variables
                      source
                      ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                      Continuous-time control system defined by a right-hand side with domain constraints of the form:

                      \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • inputdim – number of input variables
                      • X – state constraints
                      • U – input constraints
                      source
                      NoisyLinearContinuousSystem

                      Continuous-time linear system with additive disturbance of the form:

                      \[ x(t)' = A x(t) + D w(t) \; \forall t.\]

                      Fields

                      • A – state matrix
                      • D – noise matrix
                      source
                      NoisyConstrainedLinearContinuousSystem

                      Continuous-time linear system with additive disturbance and domain constraints of the form:

                      \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                      Fields

                      • A – state matrix
                      • D – noise matrix
                      • X – state constraints
                      • W – disturbance set
                      source
                      NoisyLinearControlContinuousSystem

                      Continuous-time linear control system with additive disturbance of the form:

                      \[ x(t)' = A x(t) + B u(t) + D w(t) \; \forall t.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • D – noise matrix
                      source
                      NoisyConstrainedLinearControlContinuousSystem

                      Continuous-time linear control system with additive disturbance and domain constraints of the form:

                      \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • D – noise matrix
                      • X – state constraints
                      • U – input constraints
                      • W – disturbance set
                      source
                      NoisyAffineControlContinuousSystem

                      Continuous-time affine control system with additive disturbance of the form:

                      \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • c – affine term
                      • D – noise matrix
                      source
                      NoisyConstrainedAffineControlContinuousSystem

                      Continuous-time affine control system with additive disturbance and domain constraints of the form:

                      \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • c – affine term
                      • D – noise matrix
                      • X – state constraints
                      • U – input constraints
                      • W – disturbance set
                      source
                      NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                      Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                      \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • inputdim – number of input variables
                      • noisedim – number of noise variables
                      source
                      NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                      Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                      \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • inputdim – number of input variables
                      • noisedim – number of noise variables
                      • X – state constraints
                      • U – input constraints
                      • W – disturbance set
                      source

                      Discrete Systems

                      DiscreteIdentitySystem <: AbstractDiscreteSystem

                      Trivial identity discrete-time system of the form:

                      \[ x_{k+1} = x_k \; \forall k.\]

                      Fields

                      • statedim – number of state variables
                      source
                      ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                      Trivial identity discrete-time system with domain constraints of the form:

                      \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                      Fields

                      • statedim – number of state variables
                      • X – state constraints
                      source
                      LinearDiscreteSystem

                      Discrete-time linear system of the form:

                      \[ x_{k+1} = A x_k \; \forall k.\]

                      Fields

                      • A – state matrix
                      source
                      AffineDiscreteSystem

                      Discrete-time affine system of the form:

                      \[ x_{k+1} = A x_k + c \; \forall k.\]

                      Fields

                      • A – state matrix
                      • c – affine term
                      source
                      LinearControlDiscreteSystem

                      Discrete-time linear control system of the form:

                      \[ x_{k+1} = A x_k + B u_k \; \forall k.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      source
                      ConstrainedLinearDiscreteSystem

                      Discrete-time linear system with domain constraints of the form:

                      \[ x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                      Fields

                      • A – state matrix
                      • X – state constraints
                      source
                      ConstrainedAffineDiscreteSystem

                      Discrete-time affine system with domain constraints of the form:

                      \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                      Fields

                      • A – state matrix
                      • c – affine term
                      • X – state constraints
                      source
                      ConstrainedLinearControlDiscreteSystem

                      Discrete-time linear control system with domain constraints of the form:

                      \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • X – state constraints
                      • U – input constraints
                      source
                      ConstrainedAffineControlDiscreteSystem

                      Continuous-time affine control system with domain constraints of the form:

                      \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • c – affine term
                      • X – state constraints
                      • U – input constraints
                      source
                      LinearAlgebraicDiscreteSystem

                      Discrete-time linear algebraic system of the form:

                      \[ E x_{k+1} = A x_k \; \forall k.\]

                      Fields

                      • A – state matrix
                      • E – matrix, same size as A
                      source
                      ConstrainedLinearAlgebraicDiscreteSystem

                      Discrete-time linear system with domain constraints of the form:

                      \[ E x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                      Fields

                      • A – state matrix
                      • E – matrix, same size as A
                      • X – state constraints
                      source
                      PolynomialDiscreteSystem

                      Discrete-time polynomial system of the form:

                      \[ x_{k+1} = p(x_k) \; \forall k.\]

                      Fields

                      • p – polynomial vector field
                      • statedim – number of state variables
                      source
                      ConstrainedPolynomialDiscreteSystem

                      Discrete-time polynomial system with domain constraints:

                      \[ x_{k+1} = p(x_k), \;  x_k ∈ \mathcal{X} \; \forall k.\]

                      Fields

                      • p – polynomial
                      • X – constraint set
                      • statedim – number of state variables
                      source
                      BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                      Discrete-time system defined by a right-hand side of the form:

                      \[ x_{k+1} = f(x_k) \; \forall k.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      source
                      ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                      Discrete-time system defined by a right-hand side with domain constraints of the form:

                      \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • X – state constraints
                      source
                      BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                      Discrete-time control system defined by a right-hand side of the form:

                      \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • inputdim – number of input variables
                      source
                      ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                      Discrete-time control system defined by a right-hand side with domain constraints of the form:

                      \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • inputdim – number of input variables
                      • X – state constraints
                      • U – input constraints
                      source
                      NoisyLinearDiscreteSystem

                      Discrete-time linear system with additive disturbance of the form:

                      \[ x_{k+1} = A x_k + D w_k \; \forall k.\]

                      Fields

                      • A – state matrix
                      • D – noise matrix
                      source
                      NoisyConstrainedLinearDiscreteSystem

                      Discrete-time linear system with additive disturbance and domain constraints of the form:

                      \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                      Fields

                      • A – state matrix
                      • D – noise matrix
                      • X – state constraints
                      • W – disturbance set
                      source
                      NoisyLinearControlDiscreteSystem

                      Continuous-time linear control system with additive disturbance of the form:

                      \[ x_{k+1} = A x_k + B u_k + D w_k \; \forall k.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • D – noise matrix
                      source
                      NoisyConstrainedLinearControlDiscreteSystem

                      Continuous-time linear control system with additive disturbance and domain constraints of the form:

                      \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • D – noise matrix
                      • X – state constraints
                      • U – input constraints
                      • W – disturbance set
                      source
                      NoisyAffineControlDiscreteSystem

                      Continuous-time affine control system with additive disturbance of the form:

                      \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • c – affine term
                      • D – noise matrix
                      source
                      NoisyConstrainedAffineControlDiscreteSystem

                      Continuous-time affine control system with additive disturbance and domain constraints of the form:

                      \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                      Fields

                      • A – state matrix
                      • B – input matrix
                      • c – affine term
                      • D – noise matrix
                      • X – state constraints
                      • U – input constraints
                      • W – disturbance set
                      source
                      NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                      Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                      \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • inputdim – number of input variables
                      • noisedim – number of noise variables
                      source
                      NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                      Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                      \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                      Fields

                      • f – function that holds the right-hand side
                      • statedim – number of state variables
                      • inputdim – number of input variables
                      • noisedim – number of noise variables
                      • X – state constraints
                      • U – input constraints
                      • W – disturbance set
                      source

                      Discretization Algorithms

                      AbstractDiscretizationAlgorithm

                      Abstract supertype for all discretization algorithms.

                      Note

                      For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                      _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                      +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                      are required.

                      source
                      ExactDiscretization <: AbstractDiscretizationAlgorithm

                      Exact discretization algorithm for affine systems.

                      Algorithm

                      This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                      Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                      The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                      The algorithm described above is a well known result from the literature [1].

                      [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                      source
                      EulerDiscretization <: AbstractDiscretizationAlgorithm

                      Euler discretization algorithm for affine systems.

                      Algorithm

                      This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                      Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                      The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                      The algorithm described above is a well known result from the literature [1].

                      [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                      source

                      System macro

                      system(expr...)

                      Return an instance of the system type corresponding to the given expressions.

                      Input

                      • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                      Output

                      A system that best matches the given expressions.

                      Notes

                      Terms. The expression expr contains one or more of the following sub-expressions:

                      • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                      • set constraints, e.g. x ∈ X
                      • input constraints, e.g. u ∈ U
                      • dimensionality, e.g. dim: (2,1) or dim = 1
                      • specification of the input variable, e.g. input: u or input = u
                      • specification of the noise variable, e,g, noise: w or noise = w

                      The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                      @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                      The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                      Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                      Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                      Exceptions. The following exceptions and particular cases apply:

                      • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                      • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                      • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                      Examples

                      Let us first create a continuous linear system using this macro:

                      julia> A = [1. 0; 0 1.];
                      +
                      +julia> @system(x' = A*x)
                      +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                      A discrete system is defined by using :

                      julia> @system(x⁺ = A*x)
                      +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                      Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                      julia> using LazySets
                      +
                      +julia> B = Matrix([1. 0.5]');
                      +
                      +julia> c = [1., 1.5];
                      +
                      +julia> X = BallInf(zeros(2), 10.);
                      +
                      +julia> U = BallInf(zeros(1), 2.);
                      +
                      +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                      +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                      For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                      julia> f(x, u) = x + u;
                      +
                      +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                      +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                      source

                      Initial-value problem macro

                      ivp(expr...)

                      Return an instance of the initial-value problem type corresponding to the given expressions.

                      Input

                      • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                      Output

                      An initial-value problem that best matches the given expressions.

                      Notes

                      This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                      The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

                      Examples

                      julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                      +
                      +julia> typeof(p)
                      +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                      +
                      +julia> initial_state(p)
                      +1-element Array{Float64,1}:
                      + 1.0
                      +
                      +julia> sys = @system(x' = [1 0; 0 1] * x);
                      +
                      +julia> @ivp(sys, x(0) ∈ [-1, 1])
                      +InitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])
                      source

                      Identity operator

                      IdentityMultiple{T} < AbstractMatrix{T} where T

                      A scalar multiple of the identity matrix of given order and numeric type.

                      Fields

                      • M – uniform scaling operator of type T
                      • n – size of the identity matrix

                      Notes

                      This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                      Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                      The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                      Examples

                      The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                      julia> using MathematicalSystems: IdentityMultiple
                      +
                      +julia> I2 = I(2)
                      +IdentityMultiple{Float64} of value 1.0 and order 2
                      +
                      +julia> I2 + I2
                      +IdentityMultiple{Float64} of value 2.0 and order 2
                      +
                      +julia> 4*I2
                      +IdentityMultiple{Float64} of value 4.0 and order 2

                      The numeric type (default Float64) can be passed as a second argument:

                      julia> I2r = I(2, Rational{Int})
                      +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                      +
                      +julia> I2r + I2r
                      +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                      +
                      +julia> 4*I2r
                      +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                      To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                      julia> I2 = I(2.0, 2)
                      +IdentityMultiple{Float64} of value 2.0 and order 2
                      +
                      +julia> I2r = I(2//1, 2)
                      +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                      Or use the constructor passing the UniformScaling (I):

                      julia> I2 = IdentityMultiple(2.0*I, 2)
                      +IdentityMultiple{Float64} of value 2.0 and order 2
                      +
                      +julia> I2r = IdentityMultiple(2//1*I, 2)
                      +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                      source

                      Initial Value Problems

                      InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                      Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                      Fields

                      • s – system
                      • x0 – initial state

                      Examples

                      The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                      julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                      +
                      +julia> x₀ = [-1/2, 1/2];
                      +
                      +julia> p = InitialValueProblem(s, x₀);
                      +
                      +julia> initial_state(p) # same as p.x0
                      +2-element Array{Float64,1}:
                      + -0.5
                      +  0.5
                      +
                      +julia> statedim(p)
                      +2
                      +
                      +julia> inputdim(p)
                      +0
                      source
                      IVP

                      IVP is an alias for InitialValueProblem.

                      source
                      initial_state(ivp::InitialValueProblem)

                      Return the initial state of an initial-value problem.

                      Input

                      • ivp – initial-value problem

                      Output

                      The initial state of an initial-value problem.

                      source
                      system(ivp::InitialValueProblem)

                      Return the system wrapped by an initial-value problem.

                      Input

                      • ivp – initial-value problem

                      Output

                      The system of the given initial-value problem.

                      source

                      Input Types

                      AbstractInput

                      Abstract supertype for all input types.

                      Notes

                      The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                      Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                      A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                      source
                      ConstantInput{UT} <: AbstractInput

                      Type representing an input that remains constant in time.

                      Fields

                      • U – input set

                      Examples

                      The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                      julia> c = ConstantInput(-1//2)
                      +ConstantInput{Rational{Int64}}(-1//2)
                      +
                      +julia> iterate(c, 1)
                      +(-1//2, nothing)
                      +
                      +julia> iterate(c, 2)
                      +(-1//2, nothing)
                      +
                      +julia> collect(nextinput(c, 4))
                      +4-element Array{Rational{Int64},1}:
                      + -1//2
                      + -1//2
                      + -1//2
                      + -1//2

                      The elements of this input are rational numbers:

                      julia> eltype(c)
                      +Rational{Int64}

                      To transform a constant input, you can use map as in:

                      julia> map(x->2*x, c)
                      +ConstantInput{Rational{Int64}}(-1//1)
                      source
                      VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                      Type representing an input that may vary with time.

                      Fields

                      • U – vector of input sets

                      Examples

                      The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                      julia> v = VaryingInput([-1//2, 1//2])
                      +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                      +
                      +julia> length(v)
                      +2
                      +
                      +julia> eltype(v)
                      +Rational{Int64}

                      Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                      julia> iterate(v, 1)
                      +(-1//2, 2)
                      +
                      +julia> iterate(v, 2)
                      +(1//2, 3)

                      The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                      julia> typeof(nextinput(v))
                      +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                      +
                      +julia> collect(nextinput(v, 1))
                      +1-element Array{Rational{Int64},1}:
                      + -1//2
                      +
                      +julia> collect(nextinput(v, 2))
                      +2-element Array{Rational{Int64},1}:
                      + -1//2
                      +  1//2

                      You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                      julia> collect(v)
                      +2-element Array{Rational{Int64},1}:
                      + -1//2
                      +  1//2
                      +
                      +julia> [2*vi for vi in v]
                      +2-element Array{Rational{Int64},1}:
                      + -1//1
                      +  1//1

                      Since this input type is finite, querying more elements than its length returns the full vector:

                      julia> collect(nextinput(v, 4))
                      +2-element Array{Rational{Int64},1}:
                      + -1//2
                      +  1//2

                      To transform a varying input, you can use map as in:

                      julia> map(x->2*x, v)
                      +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                      source

                      Maps

                      AbstractMap

                      Abstract supertype for all map types.

                      source
                      IdentityMap

                      An identity map,

                      \[ x ↦ x.\]

                      Fields

                      • dim – dimension
                      source
                      ConstrainedIdentityMap

                      An identity map with state constraints of the form:

                      \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                      Fields

                      • dim – dimension
                      • X – state constraints
                      source
                      LinearMap

                      A linear map,

                      \[ x ↦ Ax\]

                      Fields

                      • A – matrix
                      source
                      ConstrainedLinearMap

                      A linear map with state constraints of the form:

                      \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                      Fields

                      • A – matrix
                      • X – state constraints
                      source
                      AffineMap

                      An affine map,

                      \[ x ↦ Ax + c.\]

                      Fields

                      • A – matrix
                      • c – vector
                      source
                      ConstrainedAffineMap

                      An affine map with state constraints of the form:

                      \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                      Fields

                      • A – matrix
                      • c – vector
                      • X – state constraints
                      source
                      LinearControlMap

                      A linear control map,

                      \[ (x, u) ↦ Ax + Bu.\]

                      Fields

                      • A – matrix
                      • B – matrix
                      source
                      ConstrainedLinearControlMap

                      A linear control map with state and input constraints,

                      \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                      Fields

                      • A – matrix
                      • B – matrix
                      • X – state constraints
                      • U – input constraints
                      source
                      AffineControlMap

                      An affine control map,

                      \[ (x, u) ↦ Ax + Bu + c.\]

                      Fields

                      • A – matrix
                      • B – matrix
                      • c – vector
                      source
                      ConstrainedAffineControlMap

                      An affine control map with state and input constraints,

                      \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                      Fields

                      • A – matrix
                      • B – matrix
                      • c – vector
                      • X – state constraints
                      • U – input constraints
                      source
                      ResetMap

                      A reset map,

                      \[ x ↦ R(x),\]

                      such that a subset of the variables is given a specified value, and the rest are unchanged.

                      Fields

                      • dim – dimension
                      • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                      source
                      ConstrainedResetMap

                      A reset map with state constraints of the form:

                      \[ x ↦ R(x), x ∈ \mathcal{X},\]

                      such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                      Fields

                      • dim – dimension
                      • X – state constraints
                      • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                      source

                      Macros

                      map(ex, args)

                      Return an instance of the map type corresponding to the given expression.

                      Input

                      • ex – an expression defining the map, in the form of an anonymous function
                      • args – additional optional arguments

                      Output

                      A map that best matches the given expression.

                      Examples

                      Let us first create a linear map using this macro:

                      julia> @map x -> [1 0; 0 0]*x
                      +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                      We can create an affine system as well:

                      julia> @map x -> [1 0; 0 0]*x + [2, 0]
                      +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                      Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                      julia> @map(x -> x, dim=5)
                      +IdentityMap(5)

                      An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                      julia> @map x -> I(5)*x
                      +IdentityMap(5)
                      source

                      Systems with output

                      SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                      Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                      Fields

                      • s – system of type ST
                      • outputmap – output map of type MT
                      source
                      LinearTimeInvariantSystem(A, B, C, D)

                      A linear time-invariant system with of the form

                      \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                      Input

                      • A – matrix
                      • B – matrix
                      • C – matrix
                      • D – matrix

                      Output

                      A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                      source
                      LinearTimeInvariantSystem(A, B, C, D, X, U)

                      A linear time-invariant system with state and input constraints of the form

                      \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                      where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                      Input

                      • A – matrix
                      • B – matrix
                      • C – matrix
                      • D – matrix
                      • X – state constraints
                      • U – input constraints

                      Output

                      A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                      source
                      LTISystem

                      LTISystem is an alias for LinearTimeInvariantSystem.

                      source
                      diff --git a/v0.11.3/search/index.html b/v0.11.3/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.3/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                      Search

                      Search

                      Number of results: loading...

                        diff --git a/v0.11.3/search_index.js b/v0.11.3/search_index.js new file mode 100644 index 00000000..4c77c081 --- /dev/null +++ b/v0.11.3/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro-1","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s3} where #s3<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.3/siteinfo.js b/v0.11.3/siteinfo.js new file mode 100644 index 00000000..9ef7e189 --- /dev/null +++ b/v0.11.3/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.3"; diff --git a/v0.11.4/about/index.html b/v0.11.4/about/index.html new file mode 100644 index 00000000..53f1576e --- /dev/null +++ b/v0.11.4/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                        About

                        About

                        This page contains some general information about this project, and recommendations about contributing.

                        Contributing

                        If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                        Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                        Branches and pull requests (PR)

                        We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                        Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                        Unit testing and continuous integration (CI)

                        This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                        When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                        $ julia --color=yes test/runtests.jl

                        Alternatively, you can achieve the same from inside the REPL using the following command:

                        julia> Pkg.test("MathematicalSystems")

                        We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                        Contributing to the documentation

                        New functions and types should be documented according to our guidelines directly in the source code.

                        You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                        julia> ?LinearContinuousSystem

                        This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                        To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                        $ julia --color=yes docs/make.jl

                        Note that this also runs all doctests which will take some time.

                        Related projects

                        This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                        Below we list more related projects.

                        Package nameDescription
                        HybridSystems.jlHybrid Systems definitions in Julia.
                        LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                        ControlToolbox.jlAnalysis and design tools for control systems.
                        ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                        DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                        ControlSystems.jlA Control Systems Toolbox for Julia
                        ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                        Credits

                        These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                        diff --git a/v0.11.4/assets/arrow.svg b/v0.11.4/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.4/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.4/assets/documenter.css b/v0.11.4/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.4/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                        the is very first thing on the page (i.e. the second element + * in the
                        , * after the
                        , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                         surrounding the , while
                        + * highlight.js applies the .hljs style directly to the  tag.
                        + */
                        +.hljs {
                        +    background-color: transparent;
                        +    padding: 0;
                        +}
                        +
                        +@media only screen and (max-width: 768px) {
                        +    nav.toc {
                        +        position: fixed;
                        +        width: 16em;
                        +        left: -16em;
                        +        -webkit-overflow-scrolling: touch;
                        +        -webkit-transition-property: left; /* Safari */
                        +        -webkit-transition-duration: 0.3s; /* Safari */
                        +        transition-property: left;
                        +        transition-duration: 0.3s;
                        +        -webkit-transition-timing-function: ease-out; /* Safari */
                        +        transition-timing-function: ease-out;
                        +        z-index: 2;
                        +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                        +    }
                        +
                        +    nav.toc.show {
                        +        left: 0;
                        +    }
                        +
                        +    article {
                        +        margin-left: 0;
                        +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                        +        overflow-wrap: break-word;
                        +    }
                        +
                        +    article > header {
                        +        position: fixed;
                        +        left: 0;
                        +        z-index: 1;
                        +    }
                        +
                        +    article > header nav, hr {
                        +        display: none;
                        +    }
                        +
                        +    article > header div#topbar {
                        +        display: block; /* is mobile */
                        +        position: fixed;
                        +        width: 100%;
                        +        height: 1.5em;
                        +        padding-top: 1em;
                        +        padding-bottom: 1em;
                        +        background-color: #fcfcfc;
                        +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                        +        top: 0;
                        +        -webkit-transition-property: top; /* Safari */
                        +        -webkit-transition-duration: 0.3s; /* Safari */
                        +        transition-property: top;
                        +        transition-duration: 0.3s;
                        +    }
                        +
                        +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                        +        top: -4em;
                        +        -webkit-transition-property: top; /* Safari */
                        +        -webkit-transition-duration: 0.7s; /* Safari */
                        +        transition-property: top;
                        +        transition-duration: 0.7s;
                        +    }
                        +
                        +    article > header div#topbar span {
                        +        width: 80%;
                        +        height: 1.5em;
                        +        margin-top: -0.1em;
                        +        margin-left: 0.9em;
                        +        font-size: 1.2em;
                        +        overflow: hidden;
                        +    }
                        +
                        +    article > header div#topbar a.fa-bars {
                        +        float: right;
                        +        padding: 0.6em;
                        +        margin-top: -0.6em;
                        +        margin-right: 0.3em;
                        +        font-size: 1.5em;
                        +    }
                        +
                        +    article > header div#topbar a.fa-bars:visited {
                        +        color: #3091d1;
                        +    }
                        +
                        +    article table {
                        +        overflow-x: auto;
                        +        display: block;
                        +    }
                        +
                        +    article div.MathJax_Display {
                        +        overflow: scroll;
                        +    }
                        +
                        +    article span.MathJax {
                        +        overflow: hidden;
                        +    }
                        +}
                        +
                        +@media only screen and (max-width: 320px) {
                        +    body {
                        +        font-size: 15px;
                        +    }
                        +}
                        diff --git a/v0.11.4/assets/documenter.js b/v0.11.4/assets/documenter.js
                        new file mode 100644
                        index 00000000..761ae294
                        --- /dev/null
                        +++ b/v0.11.4/assets/documenter.js
                        @@ -0,0 +1,132 @@
                        +/*
                        + * Part of Documenter.jl
                        + *     https://github.com/JuliaDocs/Documenter.jl
                        + *
                        + * License: MIT
                        + */
                        +
                        +requirejs.config({
                        +    paths: {
                        +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                        +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                        +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                        +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                        +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                        +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                        +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                        +    },
                        +    shim: {
                        +        'mathjax' : {
                        +            exports: "MathJax"
                        +        },
                        +        'highlight-julia': ['highlight'],
                        +        'highlight-julia-repl': ['highlight'],
                        +    }
                        +});
                        +
                        +// Load MathJax
                        +require(['mathjax'], function(MathJax) {
                        +    MathJax.Hub.Config({
                        +      "tex2jax": {
                        +        inlineMath: [['$','$'], ['\\(','\\)']],
                        +        processEscapes: true
                        +      }
                        +    });
                        +    MathJax.Hub.Config({
                        +      config: ["MMLorHTML.js"],
                        +      jax: [
                        +        "input/TeX",
                        +        "output/HTML-CSS",
                        +        "output/NativeMML"
                        +      ],
                        +      extensions: [
                        +        "MathMenu.js",
                        +        "MathZoom.js",
                        +        "TeX/AMSmath.js",
                        +        "TeX/AMSsymbols.js",
                        +        "TeX/autobold.js",
                        +        "TeX/autoload-all.js"
                        +      ]
                        +    });
                        +    MathJax.Hub.Config({
                        +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                        +    });
                        +})
                        +
                        +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                        +    $(document).ready(function() {
                        +        hljs.initHighlighting();
                        +    })
                        +
                        +})
                        +
                        +// update the version selector with info from the siteinfo.js and ../versions.js files
                        +require(['jquery'], function($) {
                        +    $(document).ready(function() {
                        +        var version_selector = $("#version-selector");
                        +
                        +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                        +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                        +            var option = $("");
                        +            version_selector.append(option);
                        +        }
                        +
                        +        if (typeof DOC_VERSIONS !== 'undefined') {
                        +            var existing_versions = $('#version-selector > option');
                        +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                        +            DOC_VERSIONS.forEach(function(each) {
                        +                var version_url = documenterBaseURL + "/../" + each;
                        +                var existing_id = $.inArray(each, existing_versions_texts);
                        +                // if not already in the version selector, add it as a new option,
                        +                // otherwise update the old option with the URL and enable it
                        +                if (existing_id == -1) {
                        +                    var option = $("");
                        +                    version_selector.append(option);
                        +                } else {
                        +                    var option = existing_versions[existing_id];
                        +                    option.value = version_url;
                        +                    option.disabled = false;
                        +                }
                        +            });
                        +        }
                        +
                        +        // only show the version selector if the selector has been populated
                        +        if ($('#version-selector > option').length > 0) {
                        +            version_selector.css("visibility", "visible");
                        +        }
                        +
                        +        // Scroll the navigation bar to the currently selected menu item
                        +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                        +    })
                        +
                        +})
                        +
                        +// mobile
                        +require(['jquery', 'headroom'], function($, Headroom) {
                        +    $(document).ready(function() {
                        +        var navtoc = $("nav.toc");
                        +        $("nav.toc li.current a.toctext").click(function() {
                        +            navtoc.toggleClass('show');
                        +        });
                        +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                        +            ev.preventDefault();
                        +            navtoc.toggleClass('show');
                        +            if (navtoc.hasClass('show')) {
                        +                var title = $("article > header div#topbar span").text();
                        +                $("nav.toc ul li a:contains('" + title + "')").focus();
                        +            }
                        +        });
                        +        $("article#docs").bind('click', function(ev) {
                        +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                        +                return;
                        +            }
                        +            if (navtoc.hasClass('show')) {
                        +                navtoc.removeClass('show');
                        +            }
                        +        });
                        +        if ($("article > header div#topbar").css('display') == 'block') {
                        +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                        +            headroom.init();
                        +        }
                        +    })
                        +})
                        diff --git a/v0.11.4/assets/juliareach.css b/v0.11.4/assets/juliareach.css
                        new file mode 100644
                        index 00000000..64b0d92d
                        --- /dev/null
                        +++ b/v0.11.4/assets/juliareach.css
                        @@ -0,0 +1,583 @@
                        +/*
                        + * The default CSS style for Documenter.jl generated sites
                        + *
                        + * Heavily inspired by the Julia Sphinx theme
                        + *     https://github.com/JuliaLang/JuliaDoc
                        + * which extends the sphinx_rtd_theme
                        + *     https://github.com/snide/sphinx_rtd_theme
                        + *
                        + * Part of Documenter.jl
                        + *     https://github.com/JuliaDocs/Documenter.jl
                        + *
                        + * License: MIT
                        + */
                        +
                        +/* The original CSS is modified such that it right-justifies the text. */
                        +
                        +/* fonts */
                        +body, input {
                        +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                        +  font-size: 16px;
                        +  color: #222;
                        +  text-rendering: optimizeLegibility;
                        +}
                        +
                        +pre, code, kbd {
                        +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                        +  font-size: 0.90em;
                        +}
                        +
                        +pre code {
                        +  font-size: 1em;
                        +}
                        +
                        +a {
                        +    color: #2980b9;
                        +    text-decoration: none;
                        +}
                        +
                        +a:hover {
                        +    color: #3091d1;
                        +}
                        +
                        +a:visited {
                        +    color: #9b59b6;
                        +}
                        +
                        +body {
                        +    line-height: 1.5;
                        +}
                        +
                        +h1 {
                        +    font-size: 1.75em;
                        +}
                        +
                        +/* Unless the 

                        the is very first thing on the page (i.e. the second element + * in the
                        , * after the
                        , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                         surrounding the , while
                        + * highlight.js applies the .hljs style directly to the  tag.
                        + */
                        +.hljs {
                        +    background-color: transparent;
                        +    padding: 0;
                        +}
                        +
                        +@media only screen and (max-width: 768px) {
                        +    nav.toc {
                        +        position: fixed;
                        +        overflow-y: scroll;
                        +        width: 16em;
                        +        left: -16em;
                        +        -webkit-overflow-scrolling: touch;
                        +        -webkit-transition-property: left; /* Safari */
                        +        -webkit-transition-duration: 0.3s; /* Safari */
                        +        transition-property: left;
                        +        transition-duration: 0.3s;
                        +        -webkit-transition-timing-function: ease-out; /* Safari */
                        +        transition-timing-function: ease-out;
                        +        z-index: 2;
                        +    }
                        +
                        +    nav.toc.show {
                        +        left: 0;
                        +    }
                        +
                        +    article {
                        +        margin-left: 0;
                        +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                        +        overflow-wrap: break-word;
                        +    }
                        +
                        +    article > header {
                        +        position: fixed;
                        +        left: 0;
                        +        z-index: 1;
                        +    }
                        +
                        +    article > header nav, hr {
                        +        display: none;
                        +    }
                        +
                        +    article > header div#topbar {
                        +        display: block; /* is mobile */
                        +        position: fixed;
                        +        width: 100%;
                        +        height: 1.5em;
                        +        padding-top: 1em;
                        +        padding-bottom: 1em;
                        +        background-color: #fcfcfc;
                        +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                        +        top: 0;
                        +        -webkit-transition-property: top; /* Safari */
                        +        -webkit-transition-duration: 0.3s; /* Safari */
                        +        transition-property: top;
                        +        transition-duration: 0.3s;
                        +    }
                        +
                        +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                        +        top: -4em;
                        +        -webkit-transition-property: top; /* Safari */
                        +        -webkit-transition-duration: 0.7s; /* Safari */
                        +        transition-property: top;
                        +        transition-duration: 0.7s;
                        +    }
                        +
                        +    article > header div#topbar span {
                        +        position: fixed;
                        +        width: 80%;
                        +        height: 1.5em;
                        +        margin-top: -0.1em;
                        +        margin-left: 0.9em;
                        +        font-size: 1.2em;
                        +        overflow: hidden;
                        +    }
                        +
                        +    article > header div#topbar a.fa-bars {
                        +        float: right;
                        +        padding: 0.6em;
                        +        margin-top: -0.6em;
                        +        margin-right: 0.3em;
                        +        font-size: 1.5em;
                        +    }
                        +
                        +    article > header div#topbar a.fa-bars:visited {
                        +        color: #3091d1;
                        +    }
                        +
                        +    article table {
                        +        overflow-x: auto;
                        +        display: block;
                        +    }
                        +
                        +    article div.MathJax_Display {
                        +        overflow: scroll;
                        +    }
                        +
                        +    article span.MathJax {
                        +        overflow: hidden;
                        +    }
                        +}
                        +
                        +@media only screen and (max-width: 320px) {
                        +    body {
                        +        font-size: 15px;
                        +    }
                        +}
                        diff --git a/v0.11.4/assets/search.js b/v0.11.4/assets/search.js
                        new file mode 100644
                        index 00000000..5d32c3aa
                        --- /dev/null
                        +++ b/v0.11.4/assets/search.js
                        @@ -0,0 +1,250 @@
                        +/*
                        + * Part of Documenter.jl
                        + *     https://github.com/JuliaDocs/Documenter.jl
                        + *
                        + * License: MIT
                        + */
                        +
                        +// parseUri 1.2.2
                        +// (c) Steven Levithan 
                        +// MIT License
                        +function parseUri (str) {
                        +	var	o   = parseUri.options,
                        +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                        +		uri = {},
                        +		i   = 14;
                        +
                        +	while (i--) uri[o.key[i]] = m[i] || "";
                        +
                        +	uri[o.q.name] = {};
                        +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                        +		if ($1) uri[o.q.name][$1] = $2;
                        +	});
                        +
                        +	return uri;
                        +};
                        +parseUri.options = {
                        +	strictMode: false,
                        +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                        +	q:   {
                        +		name:   "queryKey",
                        +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                        +	},
                        +	parser: {
                        +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                        +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                        +	}
                        +};
                        +
                        +requirejs.config({
                        +    paths: {
                        +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                        +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                        +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                        +    }
                        +});
                        +
                        +var currentScript = document.currentScript;
                        +
                        +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                        +    $("#search-form").submit(function(e) {
                        +        e.preventDefault()
                        +    })
                        +
                        +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                        +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                        +    // ideally we'd just filter the original list but it's not available as a variable
                        +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                        +        'a',
                        +        'able',
                        +        'about',
                        +        'across',
                        +        'after',
                        +        'almost',
                        +        'also',
                        +        'am',
                        +        'among',
                        +        'an',
                        +        'and',
                        +        'are',
                        +        'as',
                        +        'at',
                        +        'be',
                        +        'because',
                        +        'been',
                        +        'but',
                        +        'by',
                        +        'can',
                        +        'cannot',
                        +        'could',
                        +        'dear',
                        +        'did',
                        +        'does',
                        +        'either',
                        +        'ever',
                        +        'every',
                        +        'from',
                        +        'got',
                        +        'had',
                        +        'has',
                        +        'have',
                        +        'he',
                        +        'her',
                        +        'hers',
                        +        'him',
                        +        'his',
                        +        'how',
                        +        'however',
                        +        'i',
                        +        'if',
                        +        'into',
                        +        'it',
                        +        'its',
                        +        'just',
                        +        'least',
                        +        'like',
                        +        'likely',
                        +        'may',
                        +        'me',
                        +        'might',
                        +        'most',
                        +        'must',
                        +        'my',
                        +        'neither',
                        +        'no',
                        +        'nor',
                        +        'not',
                        +        'of',
                        +        'off',
                        +        'often',
                        +        'on',
                        +        'only',
                        +        'or',
                        +        'other',
                        +        'our',
                        +        'own',
                        +        'rather',
                        +        'said',
                        +        'say',
                        +        'says',
                        +        'she',
                        +        'should',
                        +        'since',
                        +        'so',
                        +        'some',
                        +        'than',
                        +        'that',
                        +        'the',
                        +        'their',
                        +        'them',
                        +        'then',
                        +        'there',
                        +        'these',
                        +        'they',
                        +        'this',
                        +        'tis',
                        +        'to',
                        +        'too',
                        +        'twas',
                        +        'us',
                        +        'wants',
                        +        'was',
                        +        'we',
                        +        'were',
                        +        'what',
                        +        'when',
                        +        'who',
                        +        'whom',
                        +        'why',
                        +        'will',
                        +        'would',
                        +        'yet',
                        +        'you',
                        +        'your'
                        +        ])
                        +
                        +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                        +    // would not find anything if searching for "add!", only for the entire qualification
                        +    lunr.tokenizer.separator = /[\s\-\.]+/
                        +
                        +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                        +    lunr.trimmer = function (token) {
                        +        return token.update(function (s) {
                        +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                        +        })
                        +    }
                        +
                        +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                        +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                        +
                        +    var index = lunr(function () {
                        +        this.ref('location')
                        +        this.field('title')
                        +        this.field('text')
                        +        documenterSearchIndex['docs'].forEach(function(e) {
                        +            this.add(e)
                        +        }, this)
                        +    })
                        +    var store = {}
                        +
                        +    documenterSearchIndex['docs'].forEach(function(e) {
                        +        store[e.location] = {title: e.title, category: e.category}
                        +    })
                        +
                        +    $(function(){
                        +        function update_search(querystring) {
                        +            tokens = lunr.tokenizer(querystring)
                        +            results = index.query(function (q) {
                        +                tokens.forEach(function (t) {
                        +                    q.term(t.toString(), {
                        +                        fields: ["title"],
                        +                        boost: 100,
                        +                        usePipeline: false,
                        +                        editDistance: 0,
                        +                        wildcard: lunr.Query.wildcard.NONE
                        +                    })
                        +                    q.term(t.toString(), {
                        +                        fields: ["title"],
                        +                        boost: 10,
                        +                        usePipeline: false,
                        +                        editDistance: 2,
                        +                        wildcard: lunr.Query.wildcard.NONE
                        +                    })
                        +                    q.term(t.toString(), {
                        +                        fields: ["text"],
                        +                        boost: 1,
                        +                        usePipeline: true,
                        +                        editDistance: 0,
                        +                        wildcard: lunr.Query.wildcard.NONE
                        +                    })
                        +                })
                        +            })
                        +            $('#search-info').text("Number of results: " + results.length)
                        +            $('#search-results').empty()
                        +            results.forEach(function(result) {
                        +                data = store[result.ref]
                        +                link = $('')
                        +                link.text(data.title)
                        +                link.attr('href', documenterBaseURL+'/'+result.ref)
                        +                cat = $('('+data.category+')')
                        +                li = $('
                      • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.4/index.html b/v0.11.4/index.html new file mode 100644 index 00000000..8623032d --- /dev/null +++ b/v0.11.4/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                        Home

                        MathematicalSystems.jl

                        MathematicalSystems is a Julia package for mathematical systems interfaces.

                        Features

                        • Generic and flexible systems definitions, while being fast and type stable.
                        • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                        • Iterator interfaces to handle constant or time-varying inputs.

                        Library Outline

                        diff --git a/v0.11.4/lib/internals/index.html b/v0.11.4/lib/internals/index.html new file mode 100644 index 00000000..f3bfd276 --- /dev/null +++ b/v0.11.4/lib/internals/index.html @@ -0,0 +1,55 @@ + +Internals · MathematicalSystems.jl

                        Internals

                        Internals

                        This section describes functions that are internal to the library.

                        Expression handling

                        _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                        Return the system type whose field names match those in fields.

                        Input

                        • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                        • fields – tuple of field names

                        Output

                        The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                        Examples

                        julia> using MathematicalSystems: _corresponding_type
                        +
                        +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                        +LinearContinuousSystem
                        +
                        +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                        +ConstrainedLinearControlContinuousSystem
                        source
                        _capture_dim(expr)

                        Return the tuple containing the dimension(s) in expr.

                        Input

                        • expr – symbolic expression that can be of any of the following forms:

                          • :x or :(x) – state dimension
                          • :(x, u) – state and input dimension
                          • :(x, u, w) – state, input and noise dimensions

                        Output

                        • The scalar x if expr specifies the state dimension.
                        • The vector [x, u] if expr specifies state and input dimension.
                        • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                        source
                        extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                        Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                        For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                        • (:A_user, :A)
                        • (:B_user, :B)
                        • (:c_user, :c)
                        • (:D_user, :D)
                        • (:f_user, :f)
                        • (:statedim_user :statedim)
                        • (:inputdim_user :inputdim)
                        • (:noisedim_user :noisedim)

                        and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                        Input

                        • equation – dynamic equation
                        • state – state variable
                        • input – input variable
                        • noise – noise variable
                        • dim – dimensionality
                        • AT – abstract system type

                        Output

                        Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                        source
                        add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                        Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                        Input

                        • summand – expressions
                        • state – state variable
                        • input – input variable
                        • noise – noise variable

                        Output

                        Multiplication expression or symbol.

                        Example

                        julia> using MathematicalSystems: add_asterisk
                        +
                        +julia> add_asterisk(:(A1*x), :x, :u, :w)
                        +:(A1 * x)
                        +
                        +julia> add_asterisk(:(c1), :x, :u, :w)
                        +:c1
                        +
                        +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                        +:(A * x1)
                        +
                        +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                        +:(A * wb)
                        +
                        +julia> add_asterisk(:(A1u), :x, :u, :w)
                        +:(A1 * u)
                        +
                        +julia> add_asterisk(:(A1ub), :x, :u, :w)
                        +:A1ub
                        source
                        Base.sortFunction.
                        sort(parameters::Vector, order::Tuple)

                        Filter and sort the vector parameters according to order.

                        Input

                        • parameters – vector of tuples
                        • order – tuple of symbols

                        Output

                        A new vector of tuples corresponding to parameters filtered and sorted according to order.

                        Examples

                        julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                        +
                        +julia> sort(parameters, (:X, :U, :W))
                        +3-element Array{Tuple{Any,Symbol},1}:
                        + (:X1, :X)
                        + (:U1, :U)
                        + (:W1, :W)
                        +
                        +julia>  parameters = [(:const, :c), (:A, :A)];
                        +
                        +julia> sort(parameters, (:A, :B, :c, :D))
                        +2-element Array{Tuple{Any,Symbol},1}:
                        + (:A, :A)
                        + (:const, :c)

                        Notes

                        parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                        If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                        source

                        Querying expressions

                        is_equation(expr)

                        Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                        Input

                        • expr – expression

                        Output

                        A Bool indicating whether expr is an equation or not.

                        source
                        extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                        Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                        Input

                        • summands – array of expressions
                        • state – state variable
                        • input – input variable
                        • noise – noise variable

                        Output

                        Array of tuples of symbols with variable name and field name.

                        Example

                        julia> using MathematicalSystems: extract_sum
                        +
                        +julia> extract_sum([:(A1*x)], :x, :u, :w)
                        +1-element Array{Tuple{Any,Symbol},1}:
                        + (:(hcat(A1)), :A)
                        +
                        +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                        +3-element Array{Tuple{Any,Symbol},1}:
                        + (:(hcat(A1)), :A)
                        + (:(hcat(B1)), :B)
                        + (:(vcat(c)), :c)
                        +
                        +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                        +3-element Array{Tuple{Any,Symbol},1}:
                        + (:(hcat(A1)), :A)
                        + (:(hcat(B1)), :B)
                        + (:(hcat(B2)), :D)

                        Notes

                        If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                        If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                        Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                        source

                        Naming convention for systems' fields

                        Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                        FieldDescriptionGetter function
                        Astate matrixstate_matrix
                        Binput matrixinput_matrix
                        caffine termaffine_term
                        Dnoise matrixnoise_matrix
                        Xstate constraintsstateset
                        Uinput constraintsinputset
                        Wdisturbance setnoiseset
                        diff --git a/v0.11.4/lib/methods/index.html b/v0.11.4/lib/methods/index.html new file mode 100644 index 00000000..45386ec6 --- /dev/null +++ b/v0.11.4/lib/methods/index.html @@ -0,0 +1,20 @@ + +Methods · MathematicalSystems.jl

                        Methods

                        Methods

                        This section describes systems methods implemented in MathematicalSystems.jl.

                        States

                        statedim(s::AbstractSystem)

                        Returns the dimension of the state space of system s.

                        source
                        stateset(s::AbstractSystem)

                        Returns the set of allowed states of system s.

                        source

                        Inputs

                        inputdim(s::AbstractSystem)

                        Returns the dimension of the input space of system s.

                        source
                        inputset(s::AbstractSystem)

                        Returns the set of allowed inputs of system s.

                        source
                        nextinput(input::ConstantInput, n::Int=1)

                        Returns the first n elements of this input.

                        Input

                        • input – a constant input
                        • n – (optional, default: 1) the number of desired elements

                        Output

                        A repeated iterator that generates n equal samples of this input.

                        source
                        nextinput(input::VaryingInput, n::Int=1)

                        Returns the first n elements of this input.

                        Input

                        • input – varying input
                        • n – (optional, default: 1) number of desired elements

                        Output

                        An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                        source

                        Output

                        outputdim(m::AbstractMap)

                        Returns the dimension of the output space of the map m.

                        source
                        outputmap(s::SystemWithOutput)

                        Returns the output map of a system with output.

                        source

                        Traits

                        islinear(s::AbstractSystem)

                        Specifies if the dynamics of system s is specified by linear equations.

                        Notes

                        We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                        The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                        [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                        source
                        islinear(m::AbstractMap)

                        Specifies if the map m is linear or not.

                        Notes

                        A map is linear if it preserves the operations of scalar multiplication and vector addition.

                        source
                        isaffine(s::AbstractSystem)

                        Specifies if the dynamics of system s is specified by affine equations.

                        Notes

                        An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                        The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                        source
                        ispolynomial(s::AbstractSystem)

                        Specifies if the dynamics of system s is specified by polynomial equations.

                        The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                        source
                        isaffine(m::AbstractMap)

                        Specifies if the map m is affine or not.

                        Notes

                        An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                        source
                        isnoisy(s::AbstractSystem)

                        Determines if the dynamics of system s contains a noise term w.

                        The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                        source
                        iscontrolled(s::AbstractSystem)

                        Determines if the dynamics of system s contains a control input u.

                        The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                        source
                        isconstrained(s::AbstractSystem)

                        Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                        The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                        source
                        state_matrix(::AbstractSystem)

                        Return the state matrix of an affine system.

                        Notes

                        The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                        source
                        input_matrix(::AbstractSystem)

                        Return the input matrix of a system with linear input.

                        Notes

                        The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                        source
                        noise_matrix(::AbstractSystem)

                        Return the noise matrix of a system with linear noise.

                        Notes

                        The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                        source
                        affine_term(::AbstractSystem)

                        Return the affine term in an affine system.

                        Notes

                        The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                        source

                        Maps

                        apply(m::AbstractMap, args...)

                        Apply the rule specified by the map to the given arguments.

                        source

                        Successor

                        successor(system::DiscreteIdentitySystem, x::AbstractVector)

                        Return the successor state of a DiscreteIdentitySystem.

                        Input

                        • systemDiscreteIdentitySystem
                        • x – state (it should be any vector type)

                        Output

                        The same state x.

                        source
                        successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                        +          [check_constraints]=true)

                        Return the successor state of a ConstrainedDiscreteIdentitySystem.

                        Input

                        • systemConstrainedDiscreteIdentitySystem
                        • x – state (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state belongs to the state set

                        Output

                        The same state x.

                        source
                        successor(system::LinearDiscreteSystem, x::AbstractVector)

                        Return the successor state of a LinearDiscreteSystem.

                        Input

                        • systemLinearDiscreteSystem
                        • x – state (it should be any vector type)

                        Output

                        The result of applying the system to x.

                        source
                        successor(system::AffineDiscreteSystem, x::AbstractVector)

                        Return the successor state of a AffineDiscreteSystem.

                        Input

                        • systemAffineDiscreteSystem
                        • x – state (it should be any vector type)

                        Output

                        The result of applying the system to x.

                        source
                        successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                        Return the successor state of a LinearControlDiscreteSystem.

                        Input

                        • systemLinearControlDiscreteSystem
                        • x – state (it should be any vector type)
                        • u – input (it should be any vector type)

                        Output

                        The result of applying the system to x, with input u.

                        source
                        successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                        +          [check_constraints]=true)

                        Return the successor state of a ConstrainedLinearDiscreteSystem.

                        Input

                        • systemConstrainedLinearDiscreteSystem
                        • x – state (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state belongs to the state set

                        Output

                        The result of applying the system to x.

                        source
                        successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                        +          [check_constraints])

                        Return the successor state of a ConstrainedAffineDiscreteSystem.

                        Input

                        • systemConstrainedAffineDiscreteSystem
                        • x – state (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state belongs to the state set

                        Output

                        The result of applying the system to x.

                        source
                        successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                        +          u::AbstractVector; [check_constraints]=true)

                        Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                        Input

                        • systemConstrainedLinearControlDiscreteSystem
                        • x – state (it should be any vector type)
                        • u – input (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                        Output

                        The result of applying the system to x, with input u.

                        source
                        successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                        +          u::AbstractVector; [check_constraints]=true)

                        Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                        Input

                        • systemConstrainedAffineControlDiscreteSystem
                        • x – state (it should be any vector type)
                        • u – input (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                        Output

                        The result of applying the system to x, with input u.

                        source
                        successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                        Return the successor state of a BlackBoxDiscreteSystem.

                        Input

                        • systemBlackBoxDiscreteSystem
                        • x – state (it should be any vector type)

                        Output

                        The result of applying the system to x.

                        source
                        successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                        +          [check_constraints]=true)

                        Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                        Input

                        • systemConstrainedBlackBoxDiscreteSystem
                        • x – state (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state belongs to the state set

                        Output

                        The result of applying the system to x.

                        source
                        successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                        +          u::AbstractVector; [check_constraints]=true)

                        Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                        Input

                        • systemConstrainedBlackBoxControlDiscreteSystem
                        • x – state (it should be any vector type)
                        • u – input (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state belongs to the state set

                        Output

                        The result of applying the system to x, with input u.

                        source
                        successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                        +          w::AbstractVector; [check_constraints]=true)

                        Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                        Input

                        • systemNoisyConstrainedLinearDiscreteSystem
                        • x – state (it should be any vector type)
                        • w – noise (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state belongs to the state set

                        Output

                        The result of applying the system to x, with noise w.

                        source
                        successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                        +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                        Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                        Input

                        • systemNoisyConstrainedLinearControlDiscreteSystem
                        • x – state (it should be any vector type)
                        • u – input (it should be any vector type)
                        • w – noise (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                        Output

                        The result of applying the system to x, with input u and noise w.

                        source
                        successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                        +          u::AbstractVector; [check_constraints]=true)

                        Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                        Input

                        • systemNoisyConstrainedAffineControlDiscreteSystem
                        • x – state (it should be any vector type)
                        • u – input (it should be any vector type)
                        • w – noise (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                        Output

                        The result of applying the system to x, with input u and noise w.

                        source
                        successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                        +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                        Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                        Input

                        • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                        • x – state (it should be any vector type)
                        • u – input (it should be any vector type)
                        • w – noise (it should be any vector type)
                        • check_constraints – (optional, default: true) check if the state belongs to the state set

                        Output

                        The result of applying the system to x, with input u and noise w.

                        source

                        Discretization

                        discretize(system::AbstractContinuousSystem, ΔT::Real,
                        +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                        +           constructor=_default_complementary_constructor(system))

                        Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                        Input

                        • system – an affine continuous system
                        • ΔT – sampling time
                        • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                        • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                        Output

                        Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                        source

                        Internal Methods

                        _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                        +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                        Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                        Input

                        • `` – discretization algorithm, used for dispatch
                        • ΔT – sampling time
                        • A – state matrix
                        • B – input matrix
                        • c – vector
                        • D – noise matrix

                        Output

                        Returns a vector containing the discretized input arguments A, B, c and D.

                        Notes

                        See discretize for more details.

                        source
                        _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                        Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                        Input

                        • A – state matrix
                        • ΔT – sampling time
                        • algorithm – (optional, default: :exact) discretization algorithm

                        Output

                        Returns a vector containing the discretized input argument A.

                        Notes

                        See discretize for more details.

                        source
                        _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                        +            A::AbstractMatrix, B::AbstractMatrix)

                        Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                        Input

                        • algorithm – discretization algorithm
                        • ΔT – sampling time
                        • A – state matrix
                        • B – input or noise matrix

                        Output

                        Returns a vector containing the discretized input arguments A and B.

                        Notes

                        This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                        See discretize for more details.

                        source
                        _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                        +            A::AbstractMatrix,c::AbstractVector)

                        Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                        Input

                        • algorithm – discretization algorithm
                        • ΔT – sampling time
                        • A – state matrix
                        • c – vector

                        Output

                        Returns a vector containing the discretized input arguments A and c.

                        Notes

                        See discretize for more details.

                        source
                        _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                        +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                        Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                        Input

                        • algorithm – discretization algorithm
                        • ΔT – sampling time
                        • A – state matrix
                        • B – input matrix
                        • c – vector

                        Output

                        Returns a vector containing the discretized input arguments A, B and c.

                        Notes

                        See discretize for more details.

                        source
                        _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                        +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                        Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                        Input

                        • algorithm – discretization algorithm
                        • ΔT – sampling time
                        • A – state matrix
                        • B – input matrix
                        • D – noise matrix

                        Output

                        Returns a vector containing the discretized input arguments A, B and D.

                        Notes

                        See discretize for more details.

                        source
                        typename(system::AbstractSystem)

                        Returns the base type of system without parameter information.

                        Input

                        • systemAbstractSystem

                        Output

                        The base type of system.

                        source
                        _complementary_type(system_type::Type{<:AbstractSystem})

                        Return the complementary type of a system type system_type.

                        Input

                        • system_type – type of AbstractSystem

                        Ouput

                        Return complementary type of system_type.

                        Notes

                        There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                        To get the complementary type of system type, use _complementary_type(typename(system)).

                        source
                        diff --git a/v0.11.4/lib/types/index.html b/v0.11.4/lib/types/index.html new file mode 100644 index 00000000..ed508797 --- /dev/null +++ b/v0.11.4/lib/types/index.html @@ -0,0 +1,127 @@ + +Types · MathematicalSystems.jl

                        Types

                        Types

                        This section describes systems types implemented in MathematicalSystems.jl.

                        Abstract Systems

                        AbstractSystem

                        Abstract supertype for all system types.

                        source
                        AbstractContinuousSystem

                        Abstract supertype for all continuous system types.

                        source
                        AbstractDiscreteSystem

                        Abstract supertype for all discrete system types.

                        source

                        Continuous Systems

                        ContinuousIdentitySystem <: AbstractContinuousSystem

                        Trivial identity continuous-time system of the form:

                        \[ x(t)' = 0 \; \forall t.\]

                        Fields

                        • statedim – number of state variables
                        source
                        ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                        Trivial identity continuous-time system with domain constraints of the form:

                        \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                        Fields

                        • statedim – number of state variables
                        • X – state constraints
                        source
                        LinearContinuousSystem

                        Continuous-time linear system of the form:

                        \[ x(t)' = A x(t) \; \forall t.\]

                        Fields

                        • A – state matrix
                        source
                        AffineContinuousSystem

                        Continuous-time affine system of the form:

                        \[ x(t)' = A x(t) + c \; \forall t.\]

                        Fields

                        • A – state matrix
                        • c – affine term
                        source
                        LinearControlContinuousSystem

                        Continuous-time linear control system of the form:

                        \[ x(t)' = A x(t) + B u(t) \; \forall t.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        source
                        ConstrainedLinearContinuousSystem

                        Continuous-time linear system with domain constraints of the form:

                        \[ x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                        Fields

                        • A – state matrix
                        • X – state constraints
                        source
                        ConstrainedAffineContinuousSystem

                        Continuous-time affine system with domain constraints of the form:

                        \[ x(t)' = A x(t) + c, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                        Fields

                        • A – state matrix
                        • c – affine term
                        • X – state constraints
                        source
                        ConstrainedAffineControlContinuousSystem

                        Continuous-time affine control system with domain constraints of the form:

                        \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • c – affine term
                        • X – state constraints
                        • U – input constraints
                        source
                        ConstrainedLinearControlContinuousSystem

                        Continuous-time linear control system with domain constraints of the form:

                        \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • X – state constraints
                        • U – input constraints
                        source
                        LinearAlgebraicContinuousSystem

                        Continuous-time linear algebraic system of the form:

                        \[ E x(t)' = A x(t) \; \forall t.\]

                        Fields

                        • A – state matrix
                        • E – matrix, same size as A
                        source
                        ConstrainedLinearAlgebraicContinuousSystem

                        Continuous-time linear system with domain constraints of the form:

                        \[ E x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                        Fields

                        • A – state matrix
                        • E – matrix, same size as A
                        • X – state constraints
                        source
                        PolynomialContinuousSystem

                        Continuous-time polynomial system of the form:

                        \[ x(t)' = p(x(t)) \; \forall t.\]

                        Fields

                        • p – polynomial vector field
                        • statedim – number of state variables
                        source
                        ConstrainedPolynomialContinuousSystem

                        Continuous-time polynomial system with domain constraints:

                        \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                        Fields

                        • p – polynomial vector field
                        • X – constraint set
                        • statedim – number of state variables
                        source
                        BlackBoxContinuousSystem <: AbstractContinuousSystem

                        Continuous-time system defined by a right-hand side of the form:

                        \[ x(t)' = f(x(t)) \; \forall t.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        source
                        ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                        Continuous-time system defined by a right-hand side with domain constraints of the form:

                        \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • X – state constraints
                        source
                        BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                        Continuous-time control system defined by a right-hand side of the form:

                        \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • inputdim – number of input variables
                        source
                        ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                        Continuous-time control system defined by a right-hand side with domain constraints of the form:

                        \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • inputdim – number of input variables
                        • X – state constraints
                        • U – input constraints
                        source
                        NoisyLinearContinuousSystem

                        Continuous-time linear system with additive disturbance of the form:

                        \[ x(t)' = A x(t) + D w(t) \; \forall t.\]

                        Fields

                        • A – state matrix
                        • D – noise matrix
                        source
                        NoisyConstrainedLinearContinuousSystem

                        Continuous-time linear system with additive disturbance and domain constraints of the form:

                        \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                        Fields

                        • A – state matrix
                        • D – noise matrix
                        • X – state constraints
                        • W – disturbance set
                        source
                        NoisyLinearControlContinuousSystem

                        Continuous-time linear control system with additive disturbance of the form:

                        \[ x(t)' = A x(t) + B u(t) + D w(t) \; \forall t.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • D – noise matrix
                        source
                        NoisyConstrainedLinearControlContinuousSystem

                        Continuous-time linear control system with additive disturbance and domain constraints of the form:

                        \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • D – noise matrix
                        • X – state constraints
                        • U – input constraints
                        • W – disturbance set
                        source
                        NoisyAffineControlContinuousSystem

                        Continuous-time affine control system with additive disturbance of the form:

                        \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • c – affine term
                        • D – noise matrix
                        source
                        NoisyConstrainedAffineControlContinuousSystem

                        Continuous-time affine control system with additive disturbance and domain constraints of the form:

                        \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • c – affine term
                        • D – noise matrix
                        • X – state constraints
                        • U – input constraints
                        • W – disturbance set
                        source
                        NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                        Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                        \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • inputdim – number of input variables
                        • noisedim – number of noise variables
                        source
                        NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                        Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                        \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • inputdim – number of input variables
                        • noisedim – number of noise variables
                        • X – state constraints
                        • U – input constraints
                        • W – disturbance set
                        source

                        Discrete Systems

                        DiscreteIdentitySystem <: AbstractDiscreteSystem

                        Trivial identity discrete-time system of the form:

                        \[ x_{k+1} = x_k \; \forall k.\]

                        Fields

                        • statedim – number of state variables
                        source
                        ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                        Trivial identity discrete-time system with domain constraints of the form:

                        \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                        Fields

                        • statedim – number of state variables
                        • X – state constraints
                        source
                        LinearDiscreteSystem

                        Discrete-time linear system of the form:

                        \[ x_{k+1} = A x_k \; \forall k.\]

                        Fields

                        • A – state matrix
                        source
                        AffineDiscreteSystem

                        Discrete-time affine system of the form:

                        \[ x_{k+1} = A x_k + c \; \forall k.\]

                        Fields

                        • A – state matrix
                        • c – affine term
                        source
                        LinearControlDiscreteSystem

                        Discrete-time linear control system of the form:

                        \[ x_{k+1} = A x_k + B u_k \; \forall k.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        source
                        ConstrainedLinearDiscreteSystem

                        Discrete-time linear system with domain constraints of the form:

                        \[ x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                        Fields

                        • A – state matrix
                        • X – state constraints
                        source
                        ConstrainedAffineDiscreteSystem

                        Discrete-time affine system with domain constraints of the form:

                        \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                        Fields

                        • A – state matrix
                        • c – affine term
                        • X – state constraints
                        source
                        ConstrainedLinearControlDiscreteSystem

                        Discrete-time linear control system with domain constraints of the form:

                        \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • X – state constraints
                        • U – input constraints
                        source
                        ConstrainedAffineControlDiscreteSystem

                        Continuous-time affine control system with domain constraints of the form:

                        \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • c – affine term
                        • X – state constraints
                        • U – input constraints
                        source
                        LinearAlgebraicDiscreteSystem

                        Discrete-time linear algebraic system of the form:

                        \[ E x_{k+1} = A x_k \; \forall k.\]

                        Fields

                        • A – state matrix
                        • E – matrix, same size as A
                        source
                        ConstrainedLinearAlgebraicDiscreteSystem

                        Discrete-time linear system with domain constraints of the form:

                        \[ E x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                        Fields

                        • A – state matrix
                        • E – matrix, same size as A
                        • X – state constraints
                        source
                        PolynomialDiscreteSystem

                        Discrete-time polynomial system of the form:

                        \[ x_{k+1} = p(x_k) \; \forall k.\]

                        Fields

                        • p – polynomial vector field
                        • statedim – number of state variables
                        source
                        ConstrainedPolynomialDiscreteSystem

                        Discrete-time polynomial system with domain constraints:

                        \[ x_{k+1} = p(x_k), \;  x_k ∈ \mathcal{X} \; \forall k.\]

                        Fields

                        • p – polynomial
                        • X – constraint set
                        • statedim – number of state variables
                        source
                        BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                        Discrete-time system defined by a right-hand side of the form:

                        \[ x_{k+1} = f(x_k) \; \forall k.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        source
                        ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                        Discrete-time system defined by a right-hand side with domain constraints of the form:

                        \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • X – state constraints
                        source
                        BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                        Discrete-time control system defined by a right-hand side of the form:

                        \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • inputdim – number of input variables
                        source
                        ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                        Discrete-time control system defined by a right-hand side with domain constraints of the form:

                        \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • inputdim – number of input variables
                        • X – state constraints
                        • U – input constraints
                        source
                        NoisyLinearDiscreteSystem

                        Discrete-time linear system with additive disturbance of the form:

                        \[ x_{k+1} = A x_k + D w_k \; \forall k.\]

                        Fields

                        • A – state matrix
                        • D – noise matrix
                        source
                        NoisyConstrainedLinearDiscreteSystem

                        Discrete-time linear system with additive disturbance and domain constraints of the form:

                        \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                        Fields

                        • A – state matrix
                        • D – noise matrix
                        • X – state constraints
                        • W – disturbance set
                        source
                        NoisyLinearControlDiscreteSystem

                        Continuous-time linear control system with additive disturbance of the form:

                        \[ x_{k+1} = A x_k + B u_k + D w_k \; \forall k.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • D – noise matrix
                        source
                        NoisyConstrainedLinearControlDiscreteSystem

                        Continuous-time linear control system with additive disturbance and domain constraints of the form:

                        \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • D – noise matrix
                        • X – state constraints
                        • U – input constraints
                        • W – disturbance set
                        source
                        NoisyAffineControlDiscreteSystem

                        Continuous-time affine control system with additive disturbance of the form:

                        \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • c – affine term
                        • D – noise matrix
                        source
                        NoisyConstrainedAffineControlDiscreteSystem

                        Continuous-time affine control system with additive disturbance and domain constraints of the form:

                        \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                        Fields

                        • A – state matrix
                        • B – input matrix
                        • c – affine term
                        • D – noise matrix
                        • X – state constraints
                        • U – input constraints
                        • W – disturbance set
                        source
                        NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                        Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                        \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • inputdim – number of input variables
                        • noisedim – number of noise variables
                        source
                        NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                        Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                        \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                        Fields

                        • f – function that holds the right-hand side
                        • statedim – number of state variables
                        • inputdim – number of input variables
                        • noisedim – number of noise variables
                        • X – state constraints
                        • U – input constraints
                        • W – disturbance set
                        source

                        Discretization Algorithms

                        AbstractDiscretizationAlgorithm

                        Abstract supertype for all discretization algorithms.

                        Note

                        For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                        _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                        +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                        are required.

                        source
                        ExactDiscretization <: AbstractDiscretizationAlgorithm

                        Exact discretization algorithm for affine systems.

                        Algorithm

                        This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                        Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                        The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                        The algorithm described above is a well known result from the literature [1].

                        [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                        source
                        EulerDiscretization <: AbstractDiscretizationAlgorithm

                        Euler discretization algorithm for affine systems.

                        Algorithm

                        This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                        Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                        The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                        The algorithm described above is a well known result from the literature [1].

                        [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                        source

                        System macro

                        system(expr...)

                        Return an instance of the system type corresponding to the given expressions.

                        Input

                        • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                        Output

                        A system that best matches the given expressions.

                        Notes

                        Terms. The expression expr contains one or more of the following sub-expressions:

                        • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                        • set constraints, e.g. x ∈ X
                        • input constraints, e.g. u ∈ U
                        • dimensionality, e.g. dim: (2,1) or dim = 1
                        • specification of the input variable, e.g. input: u or input = u
                        • specification of the noise variable, e,g, noise: w or noise = w

                        The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                        @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                        The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                        Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                        Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                        Exceptions. The following exceptions and particular cases apply:

                        • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                        • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                        • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                        Examples

                        Let us first create a continuous linear system using this macro:

                        julia> A = [1. 0; 0 1.];
                        +
                        +julia> @system(x' = A*x)
                        +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                        A discrete system is defined by using :

                        julia> @system(x⁺ = A*x)
                        +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                        Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                        julia> using LazySets
                        +
                        +julia> B = Matrix([1. 0.5]');
                        +
                        +julia> c = [1., 1.5];
                        +
                        +julia> X = BallInf(zeros(2), 10.);
                        +
                        +julia> U = BallInf(zeros(1), 2.);
                        +
                        +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                        +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                        For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                        julia> f(x, u) = x + u;
                        +
                        +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                        +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                        source

                        Initial-value problem macro

                        ivp(expr...)

                        Return an instance of the initial-value problem type corresponding to the given expressions.

                        Input

                        • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                        Output

                        An initial-value problem that best matches the given expressions.

                        Notes

                        This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                        The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

                        Examples

                        julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                        +
                        +julia> typeof(p)
                        +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                        +
                        +julia> initial_state(p)
                        +1-element Array{Float64,1}:
                        + 1.0
                        +
                        +julia> sys = @system(x' = [1 0; 0 1] * x);
                        +
                        +julia> @ivp(sys, x(0) ∈ [-1, 1])
                        +InitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])
                        source

                        Identity operator

                        IdentityMultiple{T} < AbstractMatrix{T} where T

                        A scalar multiple of the identity matrix of given order and numeric type.

                        Fields

                        • M – uniform scaling operator of type T
                        • n – size of the identity matrix

                        Notes

                        This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                        Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                        The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                        Examples

                        The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                        julia> using MathematicalSystems: IdentityMultiple
                        +
                        +julia> I2 = I(2)
                        +IdentityMultiple{Float64} of value 1.0 and order 2
                        +
                        +julia> I2 + I2
                        +IdentityMultiple{Float64} of value 2.0 and order 2
                        +
                        +julia> 4*I2
                        +IdentityMultiple{Float64} of value 4.0 and order 2

                        The numeric type (default Float64) can be passed as a second argument:

                        julia> I2r = I(2, Rational{Int})
                        +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                        +
                        +julia> I2r + I2r
                        +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                        +
                        +julia> 4*I2r
                        +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                        To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                        julia> I2 = I(2.0, 2)
                        +IdentityMultiple{Float64} of value 2.0 and order 2
                        +
                        +julia> I2r = I(2//1, 2)
                        +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                        Or use the constructor passing the UniformScaling (I):

                        julia> I2 = IdentityMultiple(2.0*I, 2)
                        +IdentityMultiple{Float64} of value 2.0 and order 2
                        +
                        +julia> I2r = IdentityMultiple(2//1*I, 2)
                        +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                        source

                        Initial Value Problems

                        InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                        Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                        Fields

                        • s – system
                        • x0 – initial state

                        Examples

                        The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                        julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                        +
                        +julia> x₀ = [-1/2, 1/2];
                        +
                        +julia> p = InitialValueProblem(s, x₀);
                        +
                        +julia> initial_state(p) # same as p.x0
                        +2-element Array{Float64,1}:
                        + -0.5
                        +  0.5
                        +
                        +julia> statedim(p)
                        +2
                        +
                        +julia> inputdim(p)
                        +0
                        source
                        IVP

                        IVP is an alias for InitialValueProblem.

                        source
                        initial_state(ivp::InitialValueProblem)

                        Return the initial state of an initial-value problem.

                        Input

                        • ivp – initial-value problem

                        Output

                        The initial state of an initial-value problem.

                        source
                        system(ivp::InitialValueProblem)

                        Return the system wrapped by an initial-value problem.

                        Input

                        • ivp – initial-value problem

                        Output

                        The system of the given initial-value problem.

                        source

                        Input Types

                        AbstractInput

                        Abstract supertype for all input types.

                        Notes

                        The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                        Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                        A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                        source
                        ConstantInput{UT} <: AbstractInput

                        Type representing an input that remains constant in time.

                        Fields

                        • U – input set

                        Examples

                        The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                        julia> c = ConstantInput(-1//2)
                        +ConstantInput{Rational{Int64}}(-1//2)
                        +
                        +julia> iterate(c, 1)
                        +(-1//2, nothing)
                        +
                        +julia> iterate(c, 2)
                        +(-1//2, nothing)
                        +
                        +julia> collect(nextinput(c, 4))
                        +4-element Array{Rational{Int64},1}:
                        + -1//2
                        + -1//2
                        + -1//2
                        + -1//2

                        The elements of this input are rational numbers:

                        julia> eltype(c)
                        +Rational{Int64}

                        To transform a constant input, you can use map as in:

                        julia> map(x->2*x, c)
                        +ConstantInput{Rational{Int64}}(-1//1)
                        source
                        VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                        Type representing an input that may vary with time.

                        Fields

                        • U – vector of input sets

                        Examples

                        The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                        julia> v = VaryingInput([-1//2, 1//2])
                        +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                        +
                        +julia> length(v)
                        +2
                        +
                        +julia> eltype(v)
                        +Rational{Int64}

                        Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                        julia> iterate(v, 1)
                        +(-1//2, 2)
                        +
                        +julia> iterate(v, 2)
                        +(1//2, 3)

                        The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                        julia> typeof(nextinput(v))
                        +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                        +
                        +julia> collect(nextinput(v, 1))
                        +1-element Array{Rational{Int64},1}:
                        + -1//2
                        +
                        +julia> collect(nextinput(v, 2))
                        +2-element Array{Rational{Int64},1}:
                        + -1//2
                        +  1//2

                        You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                        julia> collect(v)
                        +2-element Array{Rational{Int64},1}:
                        + -1//2
                        +  1//2
                        +
                        +julia> [2*vi for vi in v]
                        +2-element Array{Rational{Int64},1}:
                        + -1//1
                        +  1//1

                        Since this input type is finite, querying more elements than its length returns the full vector:

                        julia> collect(nextinput(v, 4))
                        +2-element Array{Rational{Int64},1}:
                        + -1//2
                        +  1//2

                        To transform a varying input, you can use map as in:

                        julia> map(x->2*x, v)
                        +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                        source

                        Maps

                        AbstractMap

                        Abstract supertype for all map types.

                        source
                        IdentityMap

                        An identity map,

                        \[ x ↦ x.\]

                        Fields

                        • dim – dimension
                        source
                        ConstrainedIdentityMap

                        An identity map with state constraints of the form:

                        \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                        Fields

                        • dim – dimension
                        • X – state constraints
                        source
                        LinearMap

                        A linear map,

                        \[ x ↦ Ax\]

                        Fields

                        • A – matrix
                        source
                        ConstrainedLinearMap

                        A linear map with state constraints of the form:

                        \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                        Fields

                        • A – matrix
                        • X – state constraints
                        source
                        AffineMap

                        An affine map,

                        \[ x ↦ Ax + c.\]

                        Fields

                        • A – matrix
                        • c – vector
                        source
                        ConstrainedAffineMap

                        An affine map with state constraints of the form:

                        \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                        Fields

                        • A – matrix
                        • c – vector
                        • X – state constraints
                        source
                        LinearControlMap

                        A linear control map,

                        \[ (x, u) ↦ Ax + Bu.\]

                        Fields

                        • A – matrix
                        • B – matrix
                        source
                        ConstrainedLinearControlMap

                        A linear control map with state and input constraints,

                        \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                        Fields

                        • A – matrix
                        • B – matrix
                        • X – state constraints
                        • U – input constraints
                        source
                        AffineControlMap

                        An affine control map,

                        \[ (x, u) ↦ Ax + Bu + c.\]

                        Fields

                        • A – matrix
                        • B – matrix
                        • c – vector
                        source
                        ConstrainedAffineControlMap

                        An affine control map with state and input constraints,

                        \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                        Fields

                        • A – matrix
                        • B – matrix
                        • c – vector
                        • X – state constraints
                        • U – input constraints
                        source
                        ResetMap

                        A reset map,

                        \[ x ↦ R(x),\]

                        such that a subset of the variables is given a specified value, and the rest are unchanged.

                        Fields

                        • dim – dimension
                        • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                        source
                        ConstrainedResetMap

                        A reset map with state constraints of the form:

                        \[ x ↦ R(x), x ∈ \mathcal{X},\]

                        such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                        Fields

                        • dim – dimension
                        • X – state constraints
                        • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                        source

                        Macros

                        map(ex, args)

                        Return an instance of the map type corresponding to the given expression.

                        Input

                        • ex – an expression defining the map, in the form of an anonymous function
                        • args – additional optional arguments

                        Output

                        A map that best matches the given expression.

                        Examples

                        Let us first create a linear map using this macro:

                        julia> @map x -> [1 0; 0 0]*x
                        +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                        We can create an affine system as well:

                        julia> @map x -> [1 0; 0 0]*x + [2, 0]
                        +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                        Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                        julia> @map(x -> x, dim=5)
                        +IdentityMap(5)

                        A state constraint on such map can be specified passing the additional argument x ∈ X.

                        An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                        julia> @map x -> I(5)*x
                        +IdentityMap(5)
                        source

                        Systems with output

                        SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                        Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                        Fields

                        • s – system of type ST
                        • outputmap – output map of type MT
                        source
                        LinearTimeInvariantSystem(A, B, C, D)

                        A linear time-invariant system with of the form

                        \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                        Input

                        • A – matrix
                        • B – matrix
                        • C – matrix
                        • D – matrix

                        Output

                        A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                        source
                        LinearTimeInvariantSystem(A, B, C, D, X, U)

                        A linear time-invariant system with state and input constraints of the form

                        \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                        where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                        Input

                        • A – matrix
                        • B – matrix
                        • C – matrix
                        • D – matrix
                        • X – state constraints
                        • U – input constraints

                        Output

                        A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                        source
                        LTISystem

                        LTISystem is an alias for LinearTimeInvariantSystem.

                        source
                        diff --git a/v0.11.4/search/index.html b/v0.11.4/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.4/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                        Search

                        Search

                        Number of results: loading...

                          diff --git a/v0.11.4/search_index.js b/v0.11.4/search_index.js new file mode 100644 index 00000000..56a66762 --- /dev/null +++ b/v0.11.4/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro-1","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nA state constraint on such map can be specified passing the additional argument x ∈ X.\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s3} where #s3<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.4/siteinfo.js b/v0.11.4/siteinfo.js new file mode 100644 index 00000000..549e425c --- /dev/null +++ b/v0.11.4/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.4"; diff --git a/v0.11.5/about/index.html b/v0.11.5/about/index.html new file mode 100644 index 00000000..53f1576e --- /dev/null +++ b/v0.11.5/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                          About

                          About

                          This page contains some general information about this project, and recommendations about contributing.

                          Contributing

                          If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                          Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                          Branches and pull requests (PR)

                          We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                          Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                          Unit testing and continuous integration (CI)

                          This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                          When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                          $ julia --color=yes test/runtests.jl

                          Alternatively, you can achieve the same from inside the REPL using the following command:

                          julia> Pkg.test("MathematicalSystems")

                          We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                          Contributing to the documentation

                          New functions and types should be documented according to our guidelines directly in the source code.

                          You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                          julia> ?LinearContinuousSystem

                          This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                          To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                          $ julia --color=yes docs/make.jl

                          Note that this also runs all doctests which will take some time.

                          Related projects

                          This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                          Below we list more related projects.

                          Package nameDescription
                          HybridSystems.jlHybrid Systems definitions in Julia.
                          LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                          ControlToolbox.jlAnalysis and design tools for control systems.
                          ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                          DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                          ControlSystems.jlA Control Systems Toolbox for Julia
                          ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                          Credits

                          These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                          diff --git a/v0.11.5/assets/arrow.svg b/v0.11.5/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.5/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.5/assets/documenter.css b/v0.11.5/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.5/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                          the is very first thing on the page (i.e. the second element + * in the
                          , * after the
                          , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                           surrounding the , while
                          + * highlight.js applies the .hljs style directly to the  tag.
                          + */
                          +.hljs {
                          +    background-color: transparent;
                          +    padding: 0;
                          +}
                          +
                          +@media only screen and (max-width: 768px) {
                          +    nav.toc {
                          +        position: fixed;
                          +        width: 16em;
                          +        left: -16em;
                          +        -webkit-overflow-scrolling: touch;
                          +        -webkit-transition-property: left; /* Safari */
                          +        -webkit-transition-duration: 0.3s; /* Safari */
                          +        transition-property: left;
                          +        transition-duration: 0.3s;
                          +        -webkit-transition-timing-function: ease-out; /* Safari */
                          +        transition-timing-function: ease-out;
                          +        z-index: 2;
                          +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                          +    }
                          +
                          +    nav.toc.show {
                          +        left: 0;
                          +    }
                          +
                          +    article {
                          +        margin-left: 0;
                          +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                          +        overflow-wrap: break-word;
                          +    }
                          +
                          +    article > header {
                          +        position: fixed;
                          +        left: 0;
                          +        z-index: 1;
                          +    }
                          +
                          +    article > header nav, hr {
                          +        display: none;
                          +    }
                          +
                          +    article > header div#topbar {
                          +        display: block; /* is mobile */
                          +        position: fixed;
                          +        width: 100%;
                          +        height: 1.5em;
                          +        padding-top: 1em;
                          +        padding-bottom: 1em;
                          +        background-color: #fcfcfc;
                          +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                          +        top: 0;
                          +        -webkit-transition-property: top; /* Safari */
                          +        -webkit-transition-duration: 0.3s; /* Safari */
                          +        transition-property: top;
                          +        transition-duration: 0.3s;
                          +    }
                          +
                          +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                          +        top: -4em;
                          +        -webkit-transition-property: top; /* Safari */
                          +        -webkit-transition-duration: 0.7s; /* Safari */
                          +        transition-property: top;
                          +        transition-duration: 0.7s;
                          +    }
                          +
                          +    article > header div#topbar span {
                          +        width: 80%;
                          +        height: 1.5em;
                          +        margin-top: -0.1em;
                          +        margin-left: 0.9em;
                          +        font-size: 1.2em;
                          +        overflow: hidden;
                          +    }
                          +
                          +    article > header div#topbar a.fa-bars {
                          +        float: right;
                          +        padding: 0.6em;
                          +        margin-top: -0.6em;
                          +        margin-right: 0.3em;
                          +        font-size: 1.5em;
                          +    }
                          +
                          +    article > header div#topbar a.fa-bars:visited {
                          +        color: #3091d1;
                          +    }
                          +
                          +    article table {
                          +        overflow-x: auto;
                          +        display: block;
                          +    }
                          +
                          +    article div.MathJax_Display {
                          +        overflow: scroll;
                          +    }
                          +
                          +    article span.MathJax {
                          +        overflow: hidden;
                          +    }
                          +}
                          +
                          +@media only screen and (max-width: 320px) {
                          +    body {
                          +        font-size: 15px;
                          +    }
                          +}
                          diff --git a/v0.11.5/assets/documenter.js b/v0.11.5/assets/documenter.js
                          new file mode 100644
                          index 00000000..761ae294
                          --- /dev/null
                          +++ b/v0.11.5/assets/documenter.js
                          @@ -0,0 +1,132 @@
                          +/*
                          + * Part of Documenter.jl
                          + *     https://github.com/JuliaDocs/Documenter.jl
                          + *
                          + * License: MIT
                          + */
                          +
                          +requirejs.config({
                          +    paths: {
                          +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                          +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                          +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                          +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                          +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                          +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                          +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                          +    },
                          +    shim: {
                          +        'mathjax' : {
                          +            exports: "MathJax"
                          +        },
                          +        'highlight-julia': ['highlight'],
                          +        'highlight-julia-repl': ['highlight'],
                          +    }
                          +});
                          +
                          +// Load MathJax
                          +require(['mathjax'], function(MathJax) {
                          +    MathJax.Hub.Config({
                          +      "tex2jax": {
                          +        inlineMath: [['$','$'], ['\\(','\\)']],
                          +        processEscapes: true
                          +      }
                          +    });
                          +    MathJax.Hub.Config({
                          +      config: ["MMLorHTML.js"],
                          +      jax: [
                          +        "input/TeX",
                          +        "output/HTML-CSS",
                          +        "output/NativeMML"
                          +      ],
                          +      extensions: [
                          +        "MathMenu.js",
                          +        "MathZoom.js",
                          +        "TeX/AMSmath.js",
                          +        "TeX/AMSsymbols.js",
                          +        "TeX/autobold.js",
                          +        "TeX/autoload-all.js"
                          +      ]
                          +    });
                          +    MathJax.Hub.Config({
                          +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                          +    });
                          +})
                          +
                          +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                          +    $(document).ready(function() {
                          +        hljs.initHighlighting();
                          +    })
                          +
                          +})
                          +
                          +// update the version selector with info from the siteinfo.js and ../versions.js files
                          +require(['jquery'], function($) {
                          +    $(document).ready(function() {
                          +        var version_selector = $("#version-selector");
                          +
                          +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                          +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                          +            var option = $("");
                          +            version_selector.append(option);
                          +        }
                          +
                          +        if (typeof DOC_VERSIONS !== 'undefined') {
                          +            var existing_versions = $('#version-selector > option');
                          +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                          +            DOC_VERSIONS.forEach(function(each) {
                          +                var version_url = documenterBaseURL + "/../" + each;
                          +                var existing_id = $.inArray(each, existing_versions_texts);
                          +                // if not already in the version selector, add it as a new option,
                          +                // otherwise update the old option with the URL and enable it
                          +                if (existing_id == -1) {
                          +                    var option = $("");
                          +                    version_selector.append(option);
                          +                } else {
                          +                    var option = existing_versions[existing_id];
                          +                    option.value = version_url;
                          +                    option.disabled = false;
                          +                }
                          +            });
                          +        }
                          +
                          +        // only show the version selector if the selector has been populated
                          +        if ($('#version-selector > option').length > 0) {
                          +            version_selector.css("visibility", "visible");
                          +        }
                          +
                          +        // Scroll the navigation bar to the currently selected menu item
                          +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                          +    })
                          +
                          +})
                          +
                          +// mobile
                          +require(['jquery', 'headroom'], function($, Headroom) {
                          +    $(document).ready(function() {
                          +        var navtoc = $("nav.toc");
                          +        $("nav.toc li.current a.toctext").click(function() {
                          +            navtoc.toggleClass('show');
                          +        });
                          +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                          +            ev.preventDefault();
                          +            navtoc.toggleClass('show');
                          +            if (navtoc.hasClass('show')) {
                          +                var title = $("article > header div#topbar span").text();
                          +                $("nav.toc ul li a:contains('" + title + "')").focus();
                          +            }
                          +        });
                          +        $("article#docs").bind('click', function(ev) {
                          +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                          +                return;
                          +            }
                          +            if (navtoc.hasClass('show')) {
                          +                navtoc.removeClass('show');
                          +            }
                          +        });
                          +        if ($("article > header div#topbar").css('display') == 'block') {
                          +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                          +            headroom.init();
                          +        }
                          +    })
                          +})
                          diff --git a/v0.11.5/assets/juliareach.css b/v0.11.5/assets/juliareach.css
                          new file mode 100644
                          index 00000000..64b0d92d
                          --- /dev/null
                          +++ b/v0.11.5/assets/juliareach.css
                          @@ -0,0 +1,583 @@
                          +/*
                          + * The default CSS style for Documenter.jl generated sites
                          + *
                          + * Heavily inspired by the Julia Sphinx theme
                          + *     https://github.com/JuliaLang/JuliaDoc
                          + * which extends the sphinx_rtd_theme
                          + *     https://github.com/snide/sphinx_rtd_theme
                          + *
                          + * Part of Documenter.jl
                          + *     https://github.com/JuliaDocs/Documenter.jl
                          + *
                          + * License: MIT
                          + */
                          +
                          +/* The original CSS is modified such that it right-justifies the text. */
                          +
                          +/* fonts */
                          +body, input {
                          +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                          +  font-size: 16px;
                          +  color: #222;
                          +  text-rendering: optimizeLegibility;
                          +}
                          +
                          +pre, code, kbd {
                          +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                          +  font-size: 0.90em;
                          +}
                          +
                          +pre code {
                          +  font-size: 1em;
                          +}
                          +
                          +a {
                          +    color: #2980b9;
                          +    text-decoration: none;
                          +}
                          +
                          +a:hover {
                          +    color: #3091d1;
                          +}
                          +
                          +a:visited {
                          +    color: #9b59b6;
                          +}
                          +
                          +body {
                          +    line-height: 1.5;
                          +}
                          +
                          +h1 {
                          +    font-size: 1.75em;
                          +}
                          +
                          +/* Unless the 

                          the is very first thing on the page (i.e. the second element + * in the
                          , * after the
                          , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                           surrounding the , while
                          + * highlight.js applies the .hljs style directly to the  tag.
                          + */
                          +.hljs {
                          +    background-color: transparent;
                          +    padding: 0;
                          +}
                          +
                          +@media only screen and (max-width: 768px) {
                          +    nav.toc {
                          +        position: fixed;
                          +        overflow-y: scroll;
                          +        width: 16em;
                          +        left: -16em;
                          +        -webkit-overflow-scrolling: touch;
                          +        -webkit-transition-property: left; /* Safari */
                          +        -webkit-transition-duration: 0.3s; /* Safari */
                          +        transition-property: left;
                          +        transition-duration: 0.3s;
                          +        -webkit-transition-timing-function: ease-out; /* Safari */
                          +        transition-timing-function: ease-out;
                          +        z-index: 2;
                          +    }
                          +
                          +    nav.toc.show {
                          +        left: 0;
                          +    }
                          +
                          +    article {
                          +        margin-left: 0;
                          +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                          +        overflow-wrap: break-word;
                          +    }
                          +
                          +    article > header {
                          +        position: fixed;
                          +        left: 0;
                          +        z-index: 1;
                          +    }
                          +
                          +    article > header nav, hr {
                          +        display: none;
                          +    }
                          +
                          +    article > header div#topbar {
                          +        display: block; /* is mobile */
                          +        position: fixed;
                          +        width: 100%;
                          +        height: 1.5em;
                          +        padding-top: 1em;
                          +        padding-bottom: 1em;
                          +        background-color: #fcfcfc;
                          +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                          +        top: 0;
                          +        -webkit-transition-property: top; /* Safari */
                          +        -webkit-transition-duration: 0.3s; /* Safari */
                          +        transition-property: top;
                          +        transition-duration: 0.3s;
                          +    }
                          +
                          +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                          +        top: -4em;
                          +        -webkit-transition-property: top; /* Safari */
                          +        -webkit-transition-duration: 0.7s; /* Safari */
                          +        transition-property: top;
                          +        transition-duration: 0.7s;
                          +    }
                          +
                          +    article > header div#topbar span {
                          +        position: fixed;
                          +        width: 80%;
                          +        height: 1.5em;
                          +        margin-top: -0.1em;
                          +        margin-left: 0.9em;
                          +        font-size: 1.2em;
                          +        overflow: hidden;
                          +    }
                          +
                          +    article > header div#topbar a.fa-bars {
                          +        float: right;
                          +        padding: 0.6em;
                          +        margin-top: -0.6em;
                          +        margin-right: 0.3em;
                          +        font-size: 1.5em;
                          +    }
                          +
                          +    article > header div#topbar a.fa-bars:visited {
                          +        color: #3091d1;
                          +    }
                          +
                          +    article table {
                          +        overflow-x: auto;
                          +        display: block;
                          +    }
                          +
                          +    article div.MathJax_Display {
                          +        overflow: scroll;
                          +    }
                          +
                          +    article span.MathJax {
                          +        overflow: hidden;
                          +    }
                          +}
                          +
                          +@media only screen and (max-width: 320px) {
                          +    body {
                          +        font-size: 15px;
                          +    }
                          +}
                          diff --git a/v0.11.5/assets/search.js b/v0.11.5/assets/search.js
                          new file mode 100644
                          index 00000000..5d32c3aa
                          --- /dev/null
                          +++ b/v0.11.5/assets/search.js
                          @@ -0,0 +1,250 @@
                          +/*
                          + * Part of Documenter.jl
                          + *     https://github.com/JuliaDocs/Documenter.jl
                          + *
                          + * License: MIT
                          + */
                          +
                          +// parseUri 1.2.2
                          +// (c) Steven Levithan 
                          +// MIT License
                          +function parseUri (str) {
                          +	var	o   = parseUri.options,
                          +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                          +		uri = {},
                          +		i   = 14;
                          +
                          +	while (i--) uri[o.key[i]] = m[i] || "";
                          +
                          +	uri[o.q.name] = {};
                          +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                          +		if ($1) uri[o.q.name][$1] = $2;
                          +	});
                          +
                          +	return uri;
                          +};
                          +parseUri.options = {
                          +	strictMode: false,
                          +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                          +	q:   {
                          +		name:   "queryKey",
                          +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                          +	},
                          +	parser: {
                          +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                          +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                          +	}
                          +};
                          +
                          +requirejs.config({
                          +    paths: {
                          +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                          +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                          +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                          +    }
                          +});
                          +
                          +var currentScript = document.currentScript;
                          +
                          +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                          +    $("#search-form").submit(function(e) {
                          +        e.preventDefault()
                          +    })
                          +
                          +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                          +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                          +    // ideally we'd just filter the original list but it's not available as a variable
                          +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                          +        'a',
                          +        'able',
                          +        'about',
                          +        'across',
                          +        'after',
                          +        'almost',
                          +        'also',
                          +        'am',
                          +        'among',
                          +        'an',
                          +        'and',
                          +        'are',
                          +        'as',
                          +        'at',
                          +        'be',
                          +        'because',
                          +        'been',
                          +        'but',
                          +        'by',
                          +        'can',
                          +        'cannot',
                          +        'could',
                          +        'dear',
                          +        'did',
                          +        'does',
                          +        'either',
                          +        'ever',
                          +        'every',
                          +        'from',
                          +        'got',
                          +        'had',
                          +        'has',
                          +        'have',
                          +        'he',
                          +        'her',
                          +        'hers',
                          +        'him',
                          +        'his',
                          +        'how',
                          +        'however',
                          +        'i',
                          +        'if',
                          +        'into',
                          +        'it',
                          +        'its',
                          +        'just',
                          +        'least',
                          +        'like',
                          +        'likely',
                          +        'may',
                          +        'me',
                          +        'might',
                          +        'most',
                          +        'must',
                          +        'my',
                          +        'neither',
                          +        'no',
                          +        'nor',
                          +        'not',
                          +        'of',
                          +        'off',
                          +        'often',
                          +        'on',
                          +        'only',
                          +        'or',
                          +        'other',
                          +        'our',
                          +        'own',
                          +        'rather',
                          +        'said',
                          +        'say',
                          +        'says',
                          +        'she',
                          +        'should',
                          +        'since',
                          +        'so',
                          +        'some',
                          +        'than',
                          +        'that',
                          +        'the',
                          +        'their',
                          +        'them',
                          +        'then',
                          +        'there',
                          +        'these',
                          +        'they',
                          +        'this',
                          +        'tis',
                          +        'to',
                          +        'too',
                          +        'twas',
                          +        'us',
                          +        'wants',
                          +        'was',
                          +        'we',
                          +        'were',
                          +        'what',
                          +        'when',
                          +        'who',
                          +        'whom',
                          +        'why',
                          +        'will',
                          +        'would',
                          +        'yet',
                          +        'you',
                          +        'your'
                          +        ])
                          +
                          +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                          +    // would not find anything if searching for "add!", only for the entire qualification
                          +    lunr.tokenizer.separator = /[\s\-\.]+/
                          +
                          +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                          +    lunr.trimmer = function (token) {
                          +        return token.update(function (s) {
                          +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                          +        })
                          +    }
                          +
                          +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                          +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                          +
                          +    var index = lunr(function () {
                          +        this.ref('location')
                          +        this.field('title')
                          +        this.field('text')
                          +        documenterSearchIndex['docs'].forEach(function(e) {
                          +            this.add(e)
                          +        }, this)
                          +    })
                          +    var store = {}
                          +
                          +    documenterSearchIndex['docs'].forEach(function(e) {
                          +        store[e.location] = {title: e.title, category: e.category}
                          +    })
                          +
                          +    $(function(){
                          +        function update_search(querystring) {
                          +            tokens = lunr.tokenizer(querystring)
                          +            results = index.query(function (q) {
                          +                tokens.forEach(function (t) {
                          +                    q.term(t.toString(), {
                          +                        fields: ["title"],
                          +                        boost: 100,
                          +                        usePipeline: false,
                          +                        editDistance: 0,
                          +                        wildcard: lunr.Query.wildcard.NONE
                          +                    })
                          +                    q.term(t.toString(), {
                          +                        fields: ["title"],
                          +                        boost: 10,
                          +                        usePipeline: false,
                          +                        editDistance: 2,
                          +                        wildcard: lunr.Query.wildcard.NONE
                          +                    })
                          +                    q.term(t.toString(), {
                          +                        fields: ["text"],
                          +                        boost: 1,
                          +                        usePipeline: true,
                          +                        editDistance: 0,
                          +                        wildcard: lunr.Query.wildcard.NONE
                          +                    })
                          +                })
                          +            })
                          +            $('#search-info').text("Number of results: " + results.length)
                          +            $('#search-results').empty()
                          +            results.forEach(function(result) {
                          +                data = store[result.ref]
                          +                link = $('')
                          +                link.text(data.title)
                          +                link.attr('href', documenterBaseURL+'/'+result.ref)
                          +                cat = $('('+data.category+')')
                          +                li = $('
                        • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.5/index.html b/v0.11.5/index.html new file mode 100644 index 00000000..8623032d --- /dev/null +++ b/v0.11.5/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                          Home

                          MathematicalSystems.jl

                          MathematicalSystems is a Julia package for mathematical systems interfaces.

                          Features

                          • Generic and flexible systems definitions, while being fast and type stable.
                          • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                          • Iterator interfaces to handle constant or time-varying inputs.

                          Library Outline

                          diff --git a/v0.11.5/lib/internals/index.html b/v0.11.5/lib/internals/index.html new file mode 100644 index 00000000..99c96261 --- /dev/null +++ b/v0.11.5/lib/internals/index.html @@ -0,0 +1,55 @@ + +Internals · MathematicalSystems.jl

                          Internals

                          Internals

                          This section describes functions that are internal to the library.

                          Expression handling

                          _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                          Return the system type whose field names match those in fields.

                          Input

                          • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                          • fields – tuple of field names

                          Output

                          The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                          Examples

                          julia> using MathematicalSystems: _corresponding_type
                          +
                          +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                          +LinearContinuousSystem
                          +
                          +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                          +ConstrainedLinearControlContinuousSystem
                          source
                          _capture_dim(expr)

                          Return the tuple containing the dimension(s) in expr.

                          Input

                          • expr – symbolic expression that can be of any of the following forms:

                            • :x or :(x) – state dimension
                            • :(x, u) – state and input dimension
                            • :(x, u, w) – state, input and noise dimensions

                          Output

                          • The scalar x if expr specifies the state dimension.
                          • The vector [x, u] if expr specifies state and input dimension.
                          • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                          source
                          extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                          Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                          For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                          • (:A_user, :A)
                          • (:B_user, :B)
                          • (:c_user, :c)
                          • (:D_user, :D)
                          • (:f_user, :f)
                          • (:statedim_user :statedim)
                          • (:inputdim_user :inputdim)
                          • (:noisedim_user :noisedim)

                          and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                          Input

                          • equation – dynamic equation
                          • state – state variable
                          • input – input variable
                          • noise – noise variable
                          • dim – dimensionality
                          • AT – abstract system type

                          Output

                          Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                          source
                          add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                          Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                          Input

                          • summand – expressions
                          • state – state variable
                          • input – input variable
                          • noise – noise variable

                          Output

                          Multiplication expression or symbol.

                          Example

                          julia> using MathematicalSystems: add_asterisk
                          +
                          +julia> add_asterisk(:(A1*x), :x, :u, :w)
                          +:(A1 * x)
                          +
                          +julia> add_asterisk(:(c1), :x, :u, :w)
                          +:c1
                          +
                          +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                          +:(A * x1)
                          +
                          +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                          +:(A * wb)
                          +
                          +julia> add_asterisk(:(A1u), :x, :u, :w)
                          +:(A1 * u)
                          +
                          +julia> add_asterisk(:(A1ub), :x, :u, :w)
                          +:A1ub
                          source
                          Base.sortFunction.
                          sort(parameters::Vector, order::Tuple)

                          Filter and sort the vector parameters according to order.

                          Input

                          • parameters – vector of tuples
                          • order – tuple of symbols

                          Output

                          A new vector of tuples corresponding to parameters filtered and sorted according to order.

                          Examples

                          julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                          +
                          +julia> sort(parameters, (:X, :U, :W))
                          +3-element Array{Tuple{Any,Symbol},1}:
                          + (:X1, :X)
                          + (:U1, :U)
                          + (:W1, :W)
                          +
                          +julia>  parameters = [(:const, :c), (:A, :A)];
                          +
                          +julia> sort(parameters, (:A, :B, :c, :D))
                          +2-element Array{Tuple{Any,Symbol},1}:
                          + (:A, :A)
                          + (:const, :c)

                          Notes

                          parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                          If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                          source

                          Querying expressions

                          is_equation(expr)

                          Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                          Input

                          • expr – expression

                          Output

                          A Bool indicating whether expr is an equation or not.

                          source
                          extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                          Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                          Input

                          • summands – array of expressions
                          • state – state variable
                          • input – input variable
                          • noise – noise variable

                          Output

                          Array of tuples of symbols with variable name and field name.

                          Example

                          julia> using MathematicalSystems: extract_sum
                          +
                          +julia> extract_sum([:(A1*x)], :x, :u, :w)
                          +1-element Array{Tuple{Any,Symbol},1}:
                          + (:(hcat(A1)), :A)
                          +
                          +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                          +3-element Array{Tuple{Any,Symbol},1}:
                          + (:(hcat(A1)), :A)
                          + (:(hcat(B1)), :B)
                          + (:(vcat(c)), :c)
                          +
                          +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                          +3-element Array{Tuple{Any,Symbol},1}:
                          + (:(hcat(A1)), :A)
                          + (:(hcat(B1)), :B)
                          + (:(hcat(B2)), :D)

                          Notes

                          If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                          If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                          Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                          source

                          Naming convention for systems' fields

                          Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                          FieldDescriptionGetter function
                          Astate matrixstate_matrix
                          Binput matrixinput_matrix
                          caffine termaffine_term
                          Dnoise matrixnoise_matrix
                          Xstate constraintsstateset
                          Uinput constraintsinputset
                          Wdisturbance setnoiseset
                          diff --git a/v0.11.5/lib/methods/index.html b/v0.11.5/lib/methods/index.html new file mode 100644 index 00000000..912abc69 --- /dev/null +++ b/v0.11.5/lib/methods/index.html @@ -0,0 +1,20 @@ + +Methods · MathematicalSystems.jl

                          Methods

                          Methods

                          This section describes systems methods implemented in MathematicalSystems.jl.

                          States

                          statedim(s::AbstractSystem)

                          Returns the dimension of the state space of system s.

                          source
                          stateset(s::AbstractSystem)

                          Returns the set of allowed states of system s.

                          source

                          Inputs

                          inputdim(s::AbstractSystem)

                          Returns the dimension of the input space of system s.

                          source
                          inputset(s::AbstractSystem)

                          Returns the set of allowed inputs of system s.

                          source
                          nextinput(input::ConstantInput, n::Int=1)

                          Returns the first n elements of this input.

                          Input

                          • input – a constant input
                          • n – (optional, default: 1) the number of desired elements

                          Output

                          A repeated iterator that generates n equal samples of this input.

                          source
                          nextinput(input::VaryingInput, n::Int=1)

                          Returns the first n elements of this input.

                          Input

                          • input – varying input
                          • n – (optional, default: 1) number of desired elements

                          Output

                          An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                          source

                          Output

                          outputdim(m::AbstractMap)

                          Returns the dimension of the output space of the map m.

                          source
                          outputmap(s::SystemWithOutput)

                          Returns the output map of a system with output.

                          source

                          Traits

                          islinear(s::AbstractSystem)

                          Specifies if the dynamics of system s is specified by linear equations.

                          Notes

                          We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                          The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                          [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                          source
                          islinear(m::AbstractMap)

                          Specifies if the map m is linear or not.

                          Notes

                          A map is linear if it preserves the operations of scalar multiplication and vector addition.

                          source
                          isaffine(s::AbstractSystem)

                          Specifies if the dynamics of system s is specified by affine equations.

                          Notes

                          An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                          The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                          source
                          ispolynomial(s::AbstractSystem)

                          Specifies if the dynamics of system s is specified by polynomial equations.

                          The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                          source
                          isaffine(m::AbstractMap)

                          Specifies if the map m is affine or not.

                          Notes

                          An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                          source
                          isnoisy(s::AbstractSystem)

                          Determines if the dynamics of system s contains a noise term w.

                          The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                          source
                          iscontrolled(s::AbstractSystem)

                          Determines if the dynamics of system s contains a control input u.

                          The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                          source
                          isconstrained(s::AbstractSystem)

                          Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                          The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                          source
                          state_matrix(::AbstractSystem)

                          Return the state matrix of an affine system.

                          Notes

                          The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                          source
                          input_matrix(::AbstractSystem)

                          Return the input matrix of a system with linear input.

                          Notes

                          The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                          source
                          noise_matrix(::AbstractSystem)

                          Return the noise matrix of a system with linear noise.

                          Notes

                          The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                          source
                          affine_term(::AbstractSystem)

                          Return the affine term in an affine system.

                          Notes

                          The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                          source

                          Maps

                          apply(m::AbstractMap, args...)

                          Apply the rule specified by the map to the given arguments.

                          source

                          Successor

                          successor(system::DiscreteIdentitySystem, x::AbstractVector)

                          Return the successor state of a DiscreteIdentitySystem.

                          Input

                          • systemDiscreteIdentitySystem
                          • x – state (it should be any vector type)

                          Output

                          The same state x.

                          source
                          successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                          +          [check_constraints]=true)

                          Return the successor state of a ConstrainedDiscreteIdentitySystem.

                          Input

                          • systemConstrainedDiscreteIdentitySystem
                          • x – state (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state belongs to the state set

                          Output

                          The same state x.

                          source
                          successor(system::LinearDiscreteSystem, x::AbstractVector)

                          Return the successor state of a LinearDiscreteSystem.

                          Input

                          • systemLinearDiscreteSystem
                          • x – state (it should be any vector type)

                          Output

                          The result of applying the system to x.

                          source
                          successor(system::AffineDiscreteSystem, x::AbstractVector)

                          Return the successor state of a AffineDiscreteSystem.

                          Input

                          • systemAffineDiscreteSystem
                          • x – state (it should be any vector type)

                          Output

                          The result of applying the system to x.

                          source
                          successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                          Return the successor state of a LinearControlDiscreteSystem.

                          Input

                          • systemLinearControlDiscreteSystem
                          • x – state (it should be any vector type)
                          • u – input (it should be any vector type)

                          Output

                          The result of applying the system to x, with input u.

                          source
                          successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                          +          [check_constraints]=true)

                          Return the successor state of a ConstrainedLinearDiscreteSystem.

                          Input

                          • systemConstrainedLinearDiscreteSystem
                          • x – state (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state belongs to the state set

                          Output

                          The result of applying the system to x.

                          source
                          successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                          +          [check_constraints])

                          Return the successor state of a ConstrainedAffineDiscreteSystem.

                          Input

                          • systemConstrainedAffineDiscreteSystem
                          • x – state (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state belongs to the state set

                          Output

                          The result of applying the system to x.

                          source
                          successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                          +          u::AbstractVector; [check_constraints]=true)

                          Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                          Input

                          • systemConstrainedLinearControlDiscreteSystem
                          • x – state (it should be any vector type)
                          • u – input (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                          Output

                          The result of applying the system to x, with input u.

                          source
                          successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                          +          u::AbstractVector; [check_constraints]=true)

                          Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                          Input

                          • systemConstrainedAffineControlDiscreteSystem
                          • x – state (it should be any vector type)
                          • u – input (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                          Output

                          The result of applying the system to x, with input u.

                          source
                          successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                          Return the successor state of a BlackBoxDiscreteSystem.

                          Input

                          • systemBlackBoxDiscreteSystem
                          • x – state (it should be any vector type)

                          Output

                          The result of applying the system to x.

                          source
                          successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                          +          [check_constraints]=true)

                          Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                          Input

                          • systemConstrainedBlackBoxDiscreteSystem
                          • x – state (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state belongs to the state set

                          Output

                          The result of applying the system to x.

                          source
                          successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                          +          u::AbstractVector; [check_constraints]=true)

                          Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                          Input

                          • systemConstrainedBlackBoxControlDiscreteSystem
                          • x – state (it should be any vector type)
                          • u – input (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state belongs to the state set

                          Output

                          The result of applying the system to x, with input u.

                          source
                          successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                          +          w::AbstractVector; [check_constraints]=true)

                          Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                          Input

                          • systemNoisyConstrainedLinearDiscreteSystem
                          • x – state (it should be any vector type)
                          • w – noise (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state belongs to the state set

                          Output

                          The result of applying the system to x, with noise w.

                          source
                          successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                          +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                          Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                          Input

                          • systemNoisyConstrainedLinearControlDiscreteSystem
                          • x – state (it should be any vector type)
                          • u – input (it should be any vector type)
                          • w – noise (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                          Output

                          The result of applying the system to x, with input u and noise w.

                          source
                          successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                          +          u::AbstractVector; [check_constraints]=true)

                          Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                          Input

                          • systemNoisyConstrainedAffineControlDiscreteSystem
                          • x – state (it should be any vector type)
                          • u – input (it should be any vector type)
                          • w – noise (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                          Output

                          The result of applying the system to x, with input u and noise w.

                          source
                          successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                          +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                          Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                          Input

                          • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                          • x – state (it should be any vector type)
                          • u – input (it should be any vector type)
                          • w – noise (it should be any vector type)
                          • check_constraints – (optional, default: true) check if the state belongs to the state set

                          Output

                          The result of applying the system to x, with input u and noise w.

                          source

                          Discretization

                          discretize(system::AbstractContinuousSystem, ΔT::Real,
                          +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                          +           constructor=_default_complementary_constructor(system))

                          Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                          Input

                          • system – an affine continuous system
                          • ΔT – sampling time
                          • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                          • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                          Output

                          Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                          source

                          Internal Methods

                          _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                          +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                          Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                          Input

                          • `` – discretization algorithm, used for dispatch
                          • ΔT – sampling time
                          • A – state matrix
                          • B – input matrix
                          • c – vector
                          • D – noise matrix

                          Output

                          Returns a vector containing the discretized input arguments A, B, c and D.

                          Notes

                          See discretize for more details.

                          source
                          _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                          Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                          Input

                          • A – state matrix
                          • ΔT – sampling time
                          • algorithm – (optional, default: :exact) discretization algorithm

                          Output

                          Returns a vector containing the discretized input argument A.

                          Notes

                          See discretize for more details.

                          source
                          _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                          +            A::AbstractMatrix, B::AbstractMatrix)

                          Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                          Input

                          • algorithm – discretization algorithm
                          • ΔT – sampling time
                          • A – state matrix
                          • B – input or noise matrix

                          Output

                          Returns a vector containing the discretized input arguments A and B.

                          Notes

                          This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                          See discretize for more details.

                          source
                          _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                          +            A::AbstractMatrix,c::AbstractVector)

                          Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                          Input

                          • algorithm – discretization algorithm
                          • ΔT – sampling time
                          • A – state matrix
                          • c – vector

                          Output

                          Returns a vector containing the discretized input arguments A and c.

                          Notes

                          See discretize for more details.

                          source
                          _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                          +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                          Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                          Input

                          • algorithm – discretization algorithm
                          • ΔT – sampling time
                          • A – state matrix
                          • B – input matrix
                          • c – vector

                          Output

                          Returns a vector containing the discretized input arguments A, B and c.

                          Notes

                          See discretize for more details.

                          source
                          _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                          +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                          Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                          Input

                          • algorithm – discretization algorithm
                          • ΔT – sampling time
                          • A – state matrix
                          • B – input matrix
                          • D – noise matrix

                          Output

                          Returns a vector containing the discretized input arguments A, B and D.

                          Notes

                          See discretize for more details.

                          source
                          typename(system::AbstractSystem)

                          Returns the base type of system without parameter information.

                          Input

                          • systemAbstractSystem

                          Output

                          The base type of system.

                          source
                          _complementary_type(system_type::Type{<:AbstractSystem})

                          Return the complementary type of a system type system_type.

                          Input

                          • system_type – type of AbstractSystem

                          Ouput

                          Return complementary type of system_type.

                          Notes

                          There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                          To get the complementary type of system type, use _complementary_type(typename(system)).

                          source
                          diff --git a/v0.11.5/lib/types/index.html b/v0.11.5/lib/types/index.html new file mode 100644 index 00000000..6fd3ac6e --- /dev/null +++ b/v0.11.5/lib/types/index.html @@ -0,0 +1,127 @@ + +Types · MathematicalSystems.jl

                          Types

                          Types

                          This section describes systems types implemented in MathematicalSystems.jl.

                          Abstract Systems

                          AbstractSystem

                          Abstract supertype for all system types.

                          source
                          AbstractContinuousSystem

                          Abstract supertype for all continuous system types.

                          source
                          AbstractDiscreteSystem

                          Abstract supertype for all discrete system types.

                          source

                          Continuous Systems

                          ContinuousIdentitySystem <: AbstractContinuousSystem

                          Trivial identity continuous-time system of the form:

                          \[ x(t)' = 0 \; \forall t.\]

                          Fields

                          • statedim – number of state variables
                          source
                          ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                          Trivial identity continuous-time system with domain constraints of the form:

                          \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                          Fields

                          • statedim – number of state variables
                          • X – state constraints
                          source
                          LinearContinuousSystem

                          Continuous-time linear system of the form:

                          \[ x(t)' = A x(t) \; \forall t.\]

                          Fields

                          • A – state matrix
                          source
                          AffineContinuousSystem

                          Continuous-time affine system of the form:

                          \[ x(t)' = A x(t) + c \; \forall t.\]

                          Fields

                          • A – state matrix
                          • c – affine term
                          source
                          LinearControlContinuousSystem

                          Continuous-time linear control system of the form:

                          \[ x(t)' = A x(t) + B u(t) \; \forall t.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          source
                          ConstrainedLinearContinuousSystem

                          Continuous-time linear system with domain constraints of the form:

                          \[ x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                          Fields

                          • A – state matrix
                          • X – state constraints
                          source
                          ConstrainedAffineContinuousSystem

                          Continuous-time affine system with domain constraints of the form:

                          \[ x(t)' = A x(t) + c, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                          Fields

                          • A – state matrix
                          • c – affine term
                          • X – state constraints
                          source
                          ConstrainedAffineControlContinuousSystem

                          Continuous-time affine control system with domain constraints of the form:

                          \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • c – affine term
                          • X – state constraints
                          • U – input constraints
                          source
                          ConstrainedLinearControlContinuousSystem

                          Continuous-time linear control system with domain constraints of the form:

                          \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • X – state constraints
                          • U – input constraints
                          source
                          LinearAlgebraicContinuousSystem

                          Continuous-time linear algebraic system of the form:

                          \[ E x(t)' = A x(t) \; \forall t.\]

                          Fields

                          • A – state matrix
                          • E – matrix, same size as A
                          source
                          ConstrainedLinearAlgebraicContinuousSystem

                          Continuous-time linear system with domain constraints of the form:

                          \[ E x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                          Fields

                          • A – state matrix
                          • E – matrix, same size as A
                          • X – state constraints
                          source
                          PolynomialContinuousSystem

                          Continuous-time polynomial system of the form:

                          \[ x(t)' = p(x(t)) \; \forall t.\]

                          Fields

                          • p – polynomial vector field
                          • statedim – number of state variables
                          source
                          ConstrainedPolynomialContinuousSystem

                          Continuous-time polynomial system with domain constraints:

                          \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                          Fields

                          • p – polynomial vector field
                          • X – constraint set
                          • statedim – number of state variables
                          source
                          BlackBoxContinuousSystem <: AbstractContinuousSystem

                          Continuous-time system defined by a right-hand side of the form:

                          \[ x(t)' = f(x(t)) \; \forall t.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          source
                          ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                          Continuous-time system defined by a right-hand side with domain constraints of the form:

                          \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • X – state constraints
                          source
                          BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                          Continuous-time control system defined by a right-hand side of the form:

                          \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • inputdim – number of input variables
                          source
                          ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                          Continuous-time control system defined by a right-hand side with domain constraints of the form:

                          \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • inputdim – number of input variables
                          • X – state constraints
                          • U – input constraints
                          source
                          NoisyLinearContinuousSystem

                          Continuous-time linear system with additive disturbance of the form:

                          \[ x(t)' = A x(t) + D w(t) \; \forall t.\]

                          Fields

                          • A – state matrix
                          • D – noise matrix
                          source
                          NoisyConstrainedLinearContinuousSystem

                          Continuous-time linear system with additive disturbance and domain constraints of the form:

                          \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                          Fields

                          • A – state matrix
                          • D – noise matrix
                          • X – state constraints
                          • W – disturbance set
                          source
                          NoisyLinearControlContinuousSystem

                          Continuous-time linear control system with additive disturbance of the form:

                          \[ x(t)' = A x(t) + B u(t) + D w(t) \; \forall t.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • D – noise matrix
                          source
                          NoisyConstrainedLinearControlContinuousSystem

                          Continuous-time linear control system with additive disturbance and domain constraints of the form:

                          \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • D – noise matrix
                          • X – state constraints
                          • U – input constraints
                          • W – disturbance set
                          source
                          NoisyAffineControlContinuousSystem

                          Continuous-time affine control system with additive disturbance of the form:

                          \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • c – affine term
                          • D – noise matrix
                          source
                          NoisyConstrainedAffineControlContinuousSystem

                          Continuous-time affine control system with additive disturbance and domain constraints of the form:

                          \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • c – affine term
                          • D – noise matrix
                          • X – state constraints
                          • U – input constraints
                          • W – disturbance set
                          source
                          NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                          Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                          \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • inputdim – number of input variables
                          • noisedim – number of noise variables
                          source
                          NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                          Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                          \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • inputdim – number of input variables
                          • noisedim – number of noise variables
                          • X – state constraints
                          • U – input constraints
                          • W – disturbance set
                          source
                          SecondOrderLinearContinuousSystem

                          Continuous-time second order linear system of the form:

                          \[ Mx''(t) + Cx'(t) + Kx(t) = 0\; \forall t.\]

                          Fields

                          • M – mass matrix
                          • C – viscosity matrix
                          • K – stiffness matrix
                          source
                          SecondOrderAffineContinuousSystem

                          Continuous-time second order affine system of the form:

                          \[ Mx''(t) + Cx'(t) + Kx(t) = b\; \forall t.\]

                          Fields

                          • M – mass matrix
                          • C – viscosity matrix
                          • K – stiffness matrix
                          • b – affine term
                          source
                          SecondOrderConstrainedAffineControlContinuousSystem

                          Continuous-time second order constrained affine control system of the form:

                          \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t) + d, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                          Fields

                          • M – mass matrix
                          • C – viscosity matrix
                          • K – stiffness matrix
                          • B – input matrix
                          • d – affine term
                          • X – state constraints
                          • U – input constraints
                          source
                          SecondOrderConstrainedLinearControlContinuousSystem

                          Continuous-time second order constrained linear control system of the form:

                          \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                          Fields

                          • M – mass matrix
                          • C – viscosity matrix
                          • K – stiffness matrix
                          • B – input matrix
                          • X – state constraints
                          • U – input constraints
                          source

                          Discrete Systems

                          DiscreteIdentitySystem <: AbstractDiscreteSystem

                          Trivial identity discrete-time system of the form:

                          \[ x_{k+1} = x_k \; \forall k.\]

                          Fields

                          • statedim – number of state variables
                          source
                          ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                          Trivial identity discrete-time system with domain constraints of the form:

                          \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                          Fields

                          • statedim – number of state variables
                          • X – state constraints
                          source
                          LinearDiscreteSystem

                          Discrete-time linear system of the form:

                          \[ x_{k+1} = A x_k \; \forall k.\]

                          Fields

                          • A – state matrix
                          source
                          AffineDiscreteSystem

                          Discrete-time affine system of the form:

                          \[ x_{k+1} = A x_k + c \; \forall k.\]

                          Fields

                          • A – state matrix
                          • c – affine term
                          source
                          LinearControlDiscreteSystem

                          Discrete-time linear control system of the form:

                          \[ x_{k+1} = A x_k + B u_k \; \forall k.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          source
                          ConstrainedLinearDiscreteSystem

                          Discrete-time linear system with domain constraints of the form:

                          \[ x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                          Fields

                          • A – state matrix
                          • X – state constraints
                          source
                          ConstrainedAffineDiscreteSystem

                          Discrete-time affine system with domain constraints of the form:

                          \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                          Fields

                          • A – state matrix
                          • c – affine term
                          • X – state constraints
                          source
                          ConstrainedLinearControlDiscreteSystem

                          Discrete-time linear control system with domain constraints of the form:

                          \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • X – state constraints
                          • U – input constraints
                          source
                          ConstrainedAffineControlDiscreteSystem

                          Continuous-time affine control system with domain constraints of the form:

                          \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • c – affine term
                          • X – state constraints
                          • U – input constraints
                          source
                          LinearAlgebraicDiscreteSystem

                          Discrete-time linear algebraic system of the form:

                          \[ E x_{k+1} = A x_k \; \forall k.\]

                          Fields

                          • A – state matrix
                          • E – matrix, same size as A
                          source
                          ConstrainedLinearAlgebraicDiscreteSystem

                          Discrete-time linear system with domain constraints of the form:

                          \[ E x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                          Fields

                          • A – state matrix
                          • E – matrix, same size as A
                          • X – state constraints
                          source
                          PolynomialDiscreteSystem

                          Discrete-time polynomial system of the form:

                          \[ x_{k+1} = p(x_k) \; \forall k.\]

                          Fields

                          • p – polynomial vector field
                          • statedim – number of state variables
                          source
                          ConstrainedPolynomialDiscreteSystem

                          Discrete-time polynomial system with domain constraints:

                          \[ x_{k+1} = p(x_k), \;  x_k ∈ \mathcal{X} \; \forall k.\]

                          Fields

                          • p – polynomial
                          • X – constraint set
                          • statedim – number of state variables
                          source
                          BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                          Discrete-time system defined by a right-hand side of the form:

                          \[ x_{k+1} = f(x_k) \; \forall k.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          source
                          ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                          Discrete-time system defined by a right-hand side with domain constraints of the form:

                          \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • X – state constraints
                          source
                          BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                          Discrete-time control system defined by a right-hand side of the form:

                          \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • inputdim – number of input variables
                          source
                          ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                          Discrete-time control system defined by a right-hand side with domain constraints of the form:

                          \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • inputdim – number of input variables
                          • X – state constraints
                          • U – input constraints
                          source
                          NoisyLinearDiscreteSystem

                          Discrete-time linear system with additive disturbance of the form:

                          \[ x_{k+1} = A x_k + D w_k \; \forall k.\]

                          Fields

                          • A – state matrix
                          • D – noise matrix
                          source
                          NoisyConstrainedLinearDiscreteSystem

                          Discrete-time linear system with additive disturbance and domain constraints of the form:

                          \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                          Fields

                          • A – state matrix
                          • D – noise matrix
                          • X – state constraints
                          • W – disturbance set
                          source
                          NoisyLinearControlDiscreteSystem

                          Continuous-time linear control system with additive disturbance of the form:

                          \[ x_{k+1} = A x_k + B u_k + D w_k \; \forall k.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • D – noise matrix
                          source
                          NoisyConstrainedLinearControlDiscreteSystem

                          Continuous-time linear control system with additive disturbance and domain constraints of the form:

                          \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • D – noise matrix
                          • X – state constraints
                          • U – input constraints
                          • W – disturbance set
                          source
                          NoisyAffineControlDiscreteSystem

                          Continuous-time affine control system with additive disturbance of the form:

                          \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • c – affine term
                          • D – noise matrix
                          source
                          NoisyConstrainedAffineControlDiscreteSystem

                          Continuous-time affine control system with additive disturbance and domain constraints of the form:

                          \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                          Fields

                          • A – state matrix
                          • B – input matrix
                          • c – affine term
                          • D – noise matrix
                          • X – state constraints
                          • U – input constraints
                          • W – disturbance set
                          source
                          NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                          Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                          \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • inputdim – number of input variables
                          • noisedim – number of noise variables
                          source
                          NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                          Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                          \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                          Fields

                          • f – function that holds the right-hand side
                          • statedim – number of state variables
                          • inputdim – number of input variables
                          • noisedim – number of noise variables
                          • X – state constraints
                          • U – input constraints
                          • W – disturbance set
                          source
                          SecondOrderLinearDiscreteSystem

                          Discrete-time second order linear system of the form:

                          \[ Mx_{k+2} + Cx_{k+1} + Kx_k = 0\; \forall k.\]

                          Fields

                          • M – mass matrix
                          • C – viscosity matrix
                          • K – stiffness matrix
                          source
                          SecondOrderAffineDiscreteSystem

                          Discrete-time second order affine system of the form:

                          \[ Mx_{k+2} + Cx_{k+1} + Kx_k = b\; \forall k.\]

                          Fields

                          • M – mass matrix
                          • C – viscosity matrix
                          • K – stiffness matrix
                          • b – affine term
                          source
                          SecondOrderConstrainedAffineControlDiscreteSystem

                          Discrete-time second order constrained affine control system of the form:

                          \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k + d, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                          Fields

                          • M – mass matrix
                          • C – viscosity matrix
                          • K – stiffness matrix
                          • B – input matrix
                          • d – affine term
                          • X – state constraints
                          • U – input constraints
                          source
                          SecondOrderConstrainedLinearControlDiscreteSystem

                          Discrete-time second order constrained linear control system of the form:

                          \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                          Fields

                          • M – mass matrix
                          • C – viscosity matrix
                          • K – stiffness matrix
                          • B – input matrix
                          • X – state constraints
                          • U – input constraints
                          source

                          Discretization Algorithms

                          AbstractDiscretizationAlgorithm

                          Abstract supertype for all discretization algorithms.

                          Note

                          For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                          _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                          +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                          are required.

                          source
                          ExactDiscretization <: AbstractDiscretizationAlgorithm

                          Exact discretization algorithm for affine systems.

                          Algorithm

                          This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                          Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                          The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                          The algorithm described above is a well known result from the literature [1].

                          [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                          source
                          EulerDiscretization <: AbstractDiscretizationAlgorithm

                          Euler discretization algorithm for affine systems.

                          Algorithm

                          This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                          Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                          The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                          The algorithm described above is a well known result from the literature [1].

                          [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                          source

                          System macro

                          system(expr...)

                          Return an instance of the system type corresponding to the given expressions.

                          Input

                          • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                          Output

                          A system that best matches the given expressions.

                          Notes

                          Terms. The expression expr contains one or more of the following sub-expressions:

                          • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                          • set constraints, e.g. x ∈ X
                          • input constraints, e.g. u ∈ U
                          • dimensionality, e.g. dim: (2,1) or dim = 1
                          • specification of the input variable, e.g. input: u or input = u
                          • specification of the noise variable, e,g, noise: w or noise = w

                          The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                          @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                          The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                          Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                          Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                          Exceptions. The following exceptions and particular cases apply:

                          • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                          • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                          • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                          Examples

                          Let us first create a continuous linear system using this macro:

                          julia> A = [1. 0; 0 1.];
                          +
                          +julia> @system(x' = A*x)
                          +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                          A discrete system is defined by using :

                          julia> @system(x⁺ = A*x)
                          +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                          Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                          julia> using LazySets
                          +
                          +julia> B = Matrix([1. 0.5]');
                          +
                          +julia> c = [1., 1.5];
                          +
                          +julia> X = BallInf(zeros(2), 10.);
                          +
                          +julia> U = BallInf(zeros(1), 2.);
                          +
                          +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                          +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                          For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                          julia> f(x, u) = x + u;
                          +
                          +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                          +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                          source

                          Initial-value problem macro

                          ivp(expr...)

                          Return an instance of the initial-value problem type corresponding to the given expressions.

                          Input

                          • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                          Output

                          An initial-value problem that best matches the given expressions.

                          Notes

                          This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                          The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

                          Examples

                          julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                          +
                          +julia> typeof(p)
                          +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                          +
                          +julia> initial_state(p)
                          +1-element Array{Float64,1}:
                          + 1.0
                          +
                          +julia> sys = @system(x' = [1 0; 0 1] * x);
                          +
                          +julia> @ivp(sys, x(0) ∈ [-1, 1])
                          +InitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])
                          source

                          Identity operator

                          IdentityMultiple{T} < AbstractMatrix{T} where T

                          A scalar multiple of the identity matrix of given order and numeric type.

                          Fields

                          • M – uniform scaling operator of type T
                          • n – size of the identity matrix

                          Notes

                          This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                          Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                          The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                          Examples

                          The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                          julia> using MathematicalSystems: IdentityMultiple
                          +
                          +julia> I2 = I(2)
                          +IdentityMultiple{Float64} of value 1.0 and order 2
                          +
                          +julia> I2 + I2
                          +IdentityMultiple{Float64} of value 2.0 and order 2
                          +
                          +julia> 4*I2
                          +IdentityMultiple{Float64} of value 4.0 and order 2

                          The numeric type (default Float64) can be passed as a second argument:

                          julia> I2r = I(2, Rational{Int})
                          +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                          +
                          +julia> I2r + I2r
                          +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                          +
                          +julia> 4*I2r
                          +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                          To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                          julia> I2 = I(2.0, 2)
                          +IdentityMultiple{Float64} of value 2.0 and order 2
                          +
                          +julia> I2r = I(2//1, 2)
                          +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                          Or use the constructor passing the UniformScaling (I):

                          julia> I2 = IdentityMultiple(2.0*I, 2)
                          +IdentityMultiple{Float64} of value 2.0 and order 2
                          +
                          +julia> I2r = IdentityMultiple(2//1*I, 2)
                          +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                          source

                          Initial Value Problems

                          InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                          Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                          Fields

                          • s – system
                          • x0 – initial state

                          Examples

                          The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                          julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                          +
                          +julia> x₀ = [-1/2, 1/2];
                          +
                          +julia> p = InitialValueProblem(s, x₀);
                          +
                          +julia> initial_state(p) # same as p.x0
                          +2-element Array{Float64,1}:
                          + -0.5
                          +  0.5
                          +
                          +julia> statedim(p)
                          +2
                          +
                          +julia> inputdim(p)
                          +0
                          source
                          IVP

                          IVP is an alias for InitialValueProblem.

                          source
                          initial_state(ivp::InitialValueProblem)

                          Return the initial state of an initial-value problem.

                          Input

                          • ivp – initial-value problem

                          Output

                          The initial state of an initial-value problem.

                          source
                          system(ivp::InitialValueProblem)

                          Return the system wrapped by an initial-value problem.

                          Input

                          • ivp – initial-value problem

                          Output

                          The system of the given initial-value problem.

                          source

                          Input Types

                          AbstractInput

                          Abstract supertype for all input types.

                          Notes

                          The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                          Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                          A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                          source
                          ConstantInput{UT} <: AbstractInput

                          Type representing an input that remains constant in time.

                          Fields

                          • U – input set

                          Examples

                          The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                          julia> c = ConstantInput(-1//2)
                          +ConstantInput{Rational{Int64}}(-1//2)
                          +
                          +julia> iterate(c, 1)
                          +(-1//2, nothing)
                          +
                          +julia> iterate(c, 2)
                          +(-1//2, nothing)
                          +
                          +julia> collect(nextinput(c, 4))
                          +4-element Array{Rational{Int64},1}:
                          + -1//2
                          + -1//2
                          + -1//2
                          + -1//2

                          The elements of this input are rational numbers:

                          julia> eltype(c)
                          +Rational{Int64}

                          To transform a constant input, you can use map as in:

                          julia> map(x->2*x, c)
                          +ConstantInput{Rational{Int64}}(-1//1)
                          source
                          VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                          Type representing an input that may vary with time.

                          Fields

                          • U – vector of input sets

                          Examples

                          The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                          julia> v = VaryingInput([-1//2, 1//2])
                          +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                          +
                          +julia> length(v)
                          +2
                          +
                          +julia> eltype(v)
                          +Rational{Int64}

                          Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                          julia> iterate(v, 1)
                          +(-1//2, 2)
                          +
                          +julia> iterate(v, 2)
                          +(1//2, 3)

                          The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                          julia> typeof(nextinput(v))
                          +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                          +
                          +julia> collect(nextinput(v, 1))
                          +1-element Array{Rational{Int64},1}:
                          + -1//2
                          +
                          +julia> collect(nextinput(v, 2))
                          +2-element Array{Rational{Int64},1}:
                          + -1//2
                          +  1//2

                          You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                          julia> collect(v)
                          +2-element Array{Rational{Int64},1}:
                          + -1//2
                          +  1//2
                          +
                          +julia> [2*vi for vi in v]
                          +2-element Array{Rational{Int64},1}:
                          + -1//1
                          +  1//1

                          Since this input type is finite, querying more elements than its length returns the full vector:

                          julia> collect(nextinput(v, 4))
                          +2-element Array{Rational{Int64},1}:
                          + -1//2
                          +  1//2

                          To transform a varying input, you can use map as in:

                          julia> map(x->2*x, v)
                          +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                          source

                          Maps

                          AbstractMap

                          Abstract supertype for all map types.

                          source
                          IdentityMap

                          An identity map,

                          \[ x ↦ x.\]

                          Fields

                          • dim – dimension
                          source
                          ConstrainedIdentityMap

                          An identity map with state constraints of the form:

                          \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                          Fields

                          • dim – dimension
                          • X – state constraints
                          source
                          LinearMap

                          A linear map,

                          \[ x ↦ Ax\]

                          Fields

                          • A – matrix
                          source
                          ConstrainedLinearMap

                          A linear map with state constraints of the form:

                          \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                          Fields

                          • A – matrix
                          • X – state constraints
                          source
                          AffineMap

                          An affine map,

                          \[ x ↦ Ax + c.\]

                          Fields

                          • A – matrix
                          • c – vector
                          source
                          ConstrainedAffineMap

                          An affine map with state constraints of the form:

                          \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                          Fields

                          • A – matrix
                          • c – vector
                          • X – state constraints
                          source
                          LinearControlMap

                          A linear control map,

                          \[ (x, u) ↦ Ax + Bu.\]

                          Fields

                          • A – matrix
                          • B – matrix
                          source
                          ConstrainedLinearControlMap

                          A linear control map with state and input constraints,

                          \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                          Fields

                          • A – matrix
                          • B – matrix
                          • X – state constraints
                          • U – input constraints
                          source
                          AffineControlMap

                          An affine control map,

                          \[ (x, u) ↦ Ax + Bu + c.\]

                          Fields

                          • A – matrix
                          • B – matrix
                          • c – vector
                          source
                          ConstrainedAffineControlMap

                          An affine control map with state and input constraints,

                          \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                          Fields

                          • A – matrix
                          • B – matrix
                          • c – vector
                          • X – state constraints
                          • U – input constraints
                          source
                          ResetMap

                          A reset map,

                          \[ x ↦ R(x),\]

                          such that a subset of the variables is given a specified value, and the rest are unchanged.

                          Fields

                          • dim – dimension
                          • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                          source
                          ConstrainedResetMap

                          A reset map with state constraints of the form:

                          \[ x ↦ R(x), x ∈ \mathcal{X},\]

                          such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                          Fields

                          • dim – dimension
                          • X – state constraints
                          • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                          source

                          Macros

                          map(ex, args)

                          Return an instance of the map type corresponding to the given expression.

                          Input

                          • ex – an expression defining the map, in the form of an anonymous function
                          • args – additional optional arguments

                          Output

                          A map that best matches the given expression.

                          Examples

                          Let us first create a linear map using this macro:

                          julia> @map x -> [1 0; 0 0]*x
                          +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                          We can create an affine system as well:

                          julia> @map x -> [1 0; 0 0]*x + [2, 0]
                          +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                          Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                          julia> @map(x -> x, dim=5)
                          +IdentityMap(5)

                          A state constraint on such map can be specified passing the additional argument x ∈ X.

                          An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                          julia> @map x -> I(5)*x
                          +IdentityMap(5)
                          source

                          Systems with output

                          SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                          Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                          Fields

                          • s – system of type ST
                          • outputmap – output map of type MT
                          source
                          LinearTimeInvariantSystem(A, B, C, D)

                          A linear time-invariant system with of the form

                          \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                          Input

                          • A – matrix
                          • B – matrix
                          • C – matrix
                          • D – matrix

                          Output

                          A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                          source
                          LinearTimeInvariantSystem(A, B, C, D, X, U)

                          A linear time-invariant system with state and input constraints of the form

                          \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                          where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                          Input

                          • A – matrix
                          • B – matrix
                          • C – matrix
                          • D – matrix
                          • X – state constraints
                          • U – input constraints

                          Output

                          A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                          source
                          LTISystem

                          LTISystem is an alias for LinearTimeInvariantSystem.

                          source
                          diff --git a/v0.11.5/search/index.html b/v0.11.5/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.5/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                          Search

                          Search

                          Number of results: loading...

                            diff --git a/v0.11.5/search_index.js b/v0.11.5/search_index.js new file mode 100644 index 00000000..63eb7203 --- /dev/null +++ b/v0.11.5/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem\nSecondOrderLinearContinuousSystem\nSecondOrderAffineContinuousSystem\nSecondOrderConstrainedAffineControlContinuousSystem\nSecondOrderConstrainedLinearControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearContinuousSystem","text":"SecondOrderLinearContinuousSystem\n\nContinuous-time second order linear system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = 0 forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineContinuousSystem","text":"SecondOrderAffineContinuousSystem\n\nContinuous-time second order affine system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = b forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","text":"SecondOrderConstrainedAffineControlContinuousSystem\n\nContinuous-time second order constrained affine control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t) + d  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","text":"SecondOrderConstrainedLinearControlContinuousSystem\n\nContinuous-time second order constrained linear control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem\nSecondOrderLinearDiscreteSystem\nSecondOrderAffineDiscreteSystem\nSecondOrderConstrainedAffineControlDiscreteSystem\nSecondOrderConstrainedLinearControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearDiscreteSystem","text":"SecondOrderLinearDiscreteSystem\n\nDiscrete-time second order linear system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = 0 forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineDiscreteSystem","text":"SecondOrderAffineDiscreteSystem\n\nDiscrete-time second order affine system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = b forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","text":"SecondOrderConstrainedAffineControlDiscreteSystem\n\nDiscrete-time second order constrained affine control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k + d  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","text":"SecondOrderConstrainedLinearControlDiscreteSystem\n\nDiscrete-time second order constrained linear control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro-1","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nA state constraint on such map can be specified passing the additional argument x ∈ X.\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s5} where #s5<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.5/siteinfo.js b/v0.11.5/siteinfo.js new file mode 100644 index 00000000..0bba6808 --- /dev/null +++ b/v0.11.5/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.5"; diff --git a/v0.11.6/about/index.html b/v0.11.6/about/index.html new file mode 100644 index 00000000..53f1576e --- /dev/null +++ b/v0.11.6/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                            About

                            About

                            This page contains some general information about this project, and recommendations about contributing.

                            Contributing

                            If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                            Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                            Branches and pull requests (PR)

                            We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                            Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                            Unit testing and continuous integration (CI)

                            This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                            When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                            $ julia --color=yes test/runtests.jl

                            Alternatively, you can achieve the same from inside the REPL using the following command:

                            julia> Pkg.test("MathematicalSystems")

                            We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                            Contributing to the documentation

                            New functions and types should be documented according to our guidelines directly in the source code.

                            You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                            julia> ?LinearContinuousSystem

                            This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                            To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                            $ julia --color=yes docs/make.jl

                            Note that this also runs all doctests which will take some time.

                            Related projects

                            This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                            Below we list more related projects.

                            Package nameDescription
                            HybridSystems.jlHybrid Systems definitions in Julia.
                            LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                            ControlToolbox.jlAnalysis and design tools for control systems.
                            ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                            DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                            ControlSystems.jlA Control Systems Toolbox for Julia
                            ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                            Credits

                            These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                            diff --git a/v0.11.6/assets/arrow.svg b/v0.11.6/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.6/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.6/assets/documenter.css b/v0.11.6/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.6/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                            the is very first thing on the page (i.e. the second element + * in the
                            , * after the
                            , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                             surrounding the , while
                            + * highlight.js applies the .hljs style directly to the  tag.
                            + */
                            +.hljs {
                            +    background-color: transparent;
                            +    padding: 0;
                            +}
                            +
                            +@media only screen and (max-width: 768px) {
                            +    nav.toc {
                            +        position: fixed;
                            +        width: 16em;
                            +        left: -16em;
                            +        -webkit-overflow-scrolling: touch;
                            +        -webkit-transition-property: left; /* Safari */
                            +        -webkit-transition-duration: 0.3s; /* Safari */
                            +        transition-property: left;
                            +        transition-duration: 0.3s;
                            +        -webkit-transition-timing-function: ease-out; /* Safari */
                            +        transition-timing-function: ease-out;
                            +        z-index: 2;
                            +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                            +    }
                            +
                            +    nav.toc.show {
                            +        left: 0;
                            +    }
                            +
                            +    article {
                            +        margin-left: 0;
                            +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                            +        overflow-wrap: break-word;
                            +    }
                            +
                            +    article > header {
                            +        position: fixed;
                            +        left: 0;
                            +        z-index: 1;
                            +    }
                            +
                            +    article > header nav, hr {
                            +        display: none;
                            +    }
                            +
                            +    article > header div#topbar {
                            +        display: block; /* is mobile */
                            +        position: fixed;
                            +        width: 100%;
                            +        height: 1.5em;
                            +        padding-top: 1em;
                            +        padding-bottom: 1em;
                            +        background-color: #fcfcfc;
                            +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                            +        top: 0;
                            +        -webkit-transition-property: top; /* Safari */
                            +        -webkit-transition-duration: 0.3s; /* Safari */
                            +        transition-property: top;
                            +        transition-duration: 0.3s;
                            +    }
                            +
                            +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                            +        top: -4em;
                            +        -webkit-transition-property: top; /* Safari */
                            +        -webkit-transition-duration: 0.7s; /* Safari */
                            +        transition-property: top;
                            +        transition-duration: 0.7s;
                            +    }
                            +
                            +    article > header div#topbar span {
                            +        width: 80%;
                            +        height: 1.5em;
                            +        margin-top: -0.1em;
                            +        margin-left: 0.9em;
                            +        font-size: 1.2em;
                            +        overflow: hidden;
                            +    }
                            +
                            +    article > header div#topbar a.fa-bars {
                            +        float: right;
                            +        padding: 0.6em;
                            +        margin-top: -0.6em;
                            +        margin-right: 0.3em;
                            +        font-size: 1.5em;
                            +    }
                            +
                            +    article > header div#topbar a.fa-bars:visited {
                            +        color: #3091d1;
                            +    }
                            +
                            +    article table {
                            +        overflow-x: auto;
                            +        display: block;
                            +    }
                            +
                            +    article div.MathJax_Display {
                            +        overflow: scroll;
                            +    }
                            +
                            +    article span.MathJax {
                            +        overflow: hidden;
                            +    }
                            +}
                            +
                            +@media only screen and (max-width: 320px) {
                            +    body {
                            +        font-size: 15px;
                            +    }
                            +}
                            diff --git a/v0.11.6/assets/documenter.js b/v0.11.6/assets/documenter.js
                            new file mode 100644
                            index 00000000..761ae294
                            --- /dev/null
                            +++ b/v0.11.6/assets/documenter.js
                            @@ -0,0 +1,132 @@
                            +/*
                            + * Part of Documenter.jl
                            + *     https://github.com/JuliaDocs/Documenter.jl
                            + *
                            + * License: MIT
                            + */
                            +
                            +requirejs.config({
                            +    paths: {
                            +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                            +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                            +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                            +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                            +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                            +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                            +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                            +    },
                            +    shim: {
                            +        'mathjax' : {
                            +            exports: "MathJax"
                            +        },
                            +        'highlight-julia': ['highlight'],
                            +        'highlight-julia-repl': ['highlight'],
                            +    }
                            +});
                            +
                            +// Load MathJax
                            +require(['mathjax'], function(MathJax) {
                            +    MathJax.Hub.Config({
                            +      "tex2jax": {
                            +        inlineMath: [['$','$'], ['\\(','\\)']],
                            +        processEscapes: true
                            +      }
                            +    });
                            +    MathJax.Hub.Config({
                            +      config: ["MMLorHTML.js"],
                            +      jax: [
                            +        "input/TeX",
                            +        "output/HTML-CSS",
                            +        "output/NativeMML"
                            +      ],
                            +      extensions: [
                            +        "MathMenu.js",
                            +        "MathZoom.js",
                            +        "TeX/AMSmath.js",
                            +        "TeX/AMSsymbols.js",
                            +        "TeX/autobold.js",
                            +        "TeX/autoload-all.js"
                            +      ]
                            +    });
                            +    MathJax.Hub.Config({
                            +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                            +    });
                            +})
                            +
                            +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                            +    $(document).ready(function() {
                            +        hljs.initHighlighting();
                            +    })
                            +
                            +})
                            +
                            +// update the version selector with info from the siteinfo.js and ../versions.js files
                            +require(['jquery'], function($) {
                            +    $(document).ready(function() {
                            +        var version_selector = $("#version-selector");
                            +
                            +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                            +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                            +            var option = $("");
                            +            version_selector.append(option);
                            +        }
                            +
                            +        if (typeof DOC_VERSIONS !== 'undefined') {
                            +            var existing_versions = $('#version-selector > option');
                            +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                            +            DOC_VERSIONS.forEach(function(each) {
                            +                var version_url = documenterBaseURL + "/../" + each;
                            +                var existing_id = $.inArray(each, existing_versions_texts);
                            +                // if not already in the version selector, add it as a new option,
                            +                // otherwise update the old option with the URL and enable it
                            +                if (existing_id == -1) {
                            +                    var option = $("");
                            +                    version_selector.append(option);
                            +                } else {
                            +                    var option = existing_versions[existing_id];
                            +                    option.value = version_url;
                            +                    option.disabled = false;
                            +                }
                            +            });
                            +        }
                            +
                            +        // only show the version selector if the selector has been populated
                            +        if ($('#version-selector > option').length > 0) {
                            +            version_selector.css("visibility", "visible");
                            +        }
                            +
                            +        // Scroll the navigation bar to the currently selected menu item
                            +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                            +    })
                            +
                            +})
                            +
                            +// mobile
                            +require(['jquery', 'headroom'], function($, Headroom) {
                            +    $(document).ready(function() {
                            +        var navtoc = $("nav.toc");
                            +        $("nav.toc li.current a.toctext").click(function() {
                            +            navtoc.toggleClass('show');
                            +        });
                            +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                            +            ev.preventDefault();
                            +            navtoc.toggleClass('show');
                            +            if (navtoc.hasClass('show')) {
                            +                var title = $("article > header div#topbar span").text();
                            +                $("nav.toc ul li a:contains('" + title + "')").focus();
                            +            }
                            +        });
                            +        $("article#docs").bind('click', function(ev) {
                            +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                            +                return;
                            +            }
                            +            if (navtoc.hasClass('show')) {
                            +                navtoc.removeClass('show');
                            +            }
                            +        });
                            +        if ($("article > header div#topbar").css('display') == 'block') {
                            +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                            +            headroom.init();
                            +        }
                            +    })
                            +})
                            diff --git a/v0.11.6/assets/juliareach.css b/v0.11.6/assets/juliareach.css
                            new file mode 100644
                            index 00000000..64b0d92d
                            --- /dev/null
                            +++ b/v0.11.6/assets/juliareach.css
                            @@ -0,0 +1,583 @@
                            +/*
                            + * The default CSS style for Documenter.jl generated sites
                            + *
                            + * Heavily inspired by the Julia Sphinx theme
                            + *     https://github.com/JuliaLang/JuliaDoc
                            + * which extends the sphinx_rtd_theme
                            + *     https://github.com/snide/sphinx_rtd_theme
                            + *
                            + * Part of Documenter.jl
                            + *     https://github.com/JuliaDocs/Documenter.jl
                            + *
                            + * License: MIT
                            + */
                            +
                            +/* The original CSS is modified such that it right-justifies the text. */
                            +
                            +/* fonts */
                            +body, input {
                            +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                            +  font-size: 16px;
                            +  color: #222;
                            +  text-rendering: optimizeLegibility;
                            +}
                            +
                            +pre, code, kbd {
                            +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                            +  font-size: 0.90em;
                            +}
                            +
                            +pre code {
                            +  font-size: 1em;
                            +}
                            +
                            +a {
                            +    color: #2980b9;
                            +    text-decoration: none;
                            +}
                            +
                            +a:hover {
                            +    color: #3091d1;
                            +}
                            +
                            +a:visited {
                            +    color: #9b59b6;
                            +}
                            +
                            +body {
                            +    line-height: 1.5;
                            +}
                            +
                            +h1 {
                            +    font-size: 1.75em;
                            +}
                            +
                            +/* Unless the 

                            the is very first thing on the page (i.e. the second element + * in the
                            , * after the
                            , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                             surrounding the , while
                            + * highlight.js applies the .hljs style directly to the  tag.
                            + */
                            +.hljs {
                            +    background-color: transparent;
                            +    padding: 0;
                            +}
                            +
                            +@media only screen and (max-width: 768px) {
                            +    nav.toc {
                            +        position: fixed;
                            +        overflow-y: scroll;
                            +        width: 16em;
                            +        left: -16em;
                            +        -webkit-overflow-scrolling: touch;
                            +        -webkit-transition-property: left; /* Safari */
                            +        -webkit-transition-duration: 0.3s; /* Safari */
                            +        transition-property: left;
                            +        transition-duration: 0.3s;
                            +        -webkit-transition-timing-function: ease-out; /* Safari */
                            +        transition-timing-function: ease-out;
                            +        z-index: 2;
                            +    }
                            +
                            +    nav.toc.show {
                            +        left: 0;
                            +    }
                            +
                            +    article {
                            +        margin-left: 0;
                            +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                            +        overflow-wrap: break-word;
                            +    }
                            +
                            +    article > header {
                            +        position: fixed;
                            +        left: 0;
                            +        z-index: 1;
                            +    }
                            +
                            +    article > header nav, hr {
                            +        display: none;
                            +    }
                            +
                            +    article > header div#topbar {
                            +        display: block; /* is mobile */
                            +        position: fixed;
                            +        width: 100%;
                            +        height: 1.5em;
                            +        padding-top: 1em;
                            +        padding-bottom: 1em;
                            +        background-color: #fcfcfc;
                            +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                            +        top: 0;
                            +        -webkit-transition-property: top; /* Safari */
                            +        -webkit-transition-duration: 0.3s; /* Safari */
                            +        transition-property: top;
                            +        transition-duration: 0.3s;
                            +    }
                            +
                            +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                            +        top: -4em;
                            +        -webkit-transition-property: top; /* Safari */
                            +        -webkit-transition-duration: 0.7s; /* Safari */
                            +        transition-property: top;
                            +        transition-duration: 0.7s;
                            +    }
                            +
                            +    article > header div#topbar span {
                            +        position: fixed;
                            +        width: 80%;
                            +        height: 1.5em;
                            +        margin-top: -0.1em;
                            +        margin-left: 0.9em;
                            +        font-size: 1.2em;
                            +        overflow: hidden;
                            +    }
                            +
                            +    article > header div#topbar a.fa-bars {
                            +        float: right;
                            +        padding: 0.6em;
                            +        margin-top: -0.6em;
                            +        margin-right: 0.3em;
                            +        font-size: 1.5em;
                            +    }
                            +
                            +    article > header div#topbar a.fa-bars:visited {
                            +        color: #3091d1;
                            +    }
                            +
                            +    article table {
                            +        overflow-x: auto;
                            +        display: block;
                            +    }
                            +
                            +    article div.MathJax_Display {
                            +        overflow: scroll;
                            +    }
                            +
                            +    article span.MathJax {
                            +        overflow: hidden;
                            +    }
                            +}
                            +
                            +@media only screen and (max-width: 320px) {
                            +    body {
                            +        font-size: 15px;
                            +    }
                            +}
                            diff --git a/v0.11.6/assets/search.js b/v0.11.6/assets/search.js
                            new file mode 100644
                            index 00000000..5d32c3aa
                            --- /dev/null
                            +++ b/v0.11.6/assets/search.js
                            @@ -0,0 +1,250 @@
                            +/*
                            + * Part of Documenter.jl
                            + *     https://github.com/JuliaDocs/Documenter.jl
                            + *
                            + * License: MIT
                            + */
                            +
                            +// parseUri 1.2.2
                            +// (c) Steven Levithan 
                            +// MIT License
                            +function parseUri (str) {
                            +	var	o   = parseUri.options,
                            +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                            +		uri = {},
                            +		i   = 14;
                            +
                            +	while (i--) uri[o.key[i]] = m[i] || "";
                            +
                            +	uri[o.q.name] = {};
                            +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                            +		if ($1) uri[o.q.name][$1] = $2;
                            +	});
                            +
                            +	return uri;
                            +};
                            +parseUri.options = {
                            +	strictMode: false,
                            +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                            +	q:   {
                            +		name:   "queryKey",
                            +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                            +	},
                            +	parser: {
                            +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                            +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                            +	}
                            +};
                            +
                            +requirejs.config({
                            +    paths: {
                            +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                            +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                            +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                            +    }
                            +});
                            +
                            +var currentScript = document.currentScript;
                            +
                            +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                            +    $("#search-form").submit(function(e) {
                            +        e.preventDefault()
                            +    })
                            +
                            +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                            +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                            +    // ideally we'd just filter the original list but it's not available as a variable
                            +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                            +        'a',
                            +        'able',
                            +        'about',
                            +        'across',
                            +        'after',
                            +        'almost',
                            +        'also',
                            +        'am',
                            +        'among',
                            +        'an',
                            +        'and',
                            +        'are',
                            +        'as',
                            +        'at',
                            +        'be',
                            +        'because',
                            +        'been',
                            +        'but',
                            +        'by',
                            +        'can',
                            +        'cannot',
                            +        'could',
                            +        'dear',
                            +        'did',
                            +        'does',
                            +        'either',
                            +        'ever',
                            +        'every',
                            +        'from',
                            +        'got',
                            +        'had',
                            +        'has',
                            +        'have',
                            +        'he',
                            +        'her',
                            +        'hers',
                            +        'him',
                            +        'his',
                            +        'how',
                            +        'however',
                            +        'i',
                            +        'if',
                            +        'into',
                            +        'it',
                            +        'its',
                            +        'just',
                            +        'least',
                            +        'like',
                            +        'likely',
                            +        'may',
                            +        'me',
                            +        'might',
                            +        'most',
                            +        'must',
                            +        'my',
                            +        'neither',
                            +        'no',
                            +        'nor',
                            +        'not',
                            +        'of',
                            +        'off',
                            +        'often',
                            +        'on',
                            +        'only',
                            +        'or',
                            +        'other',
                            +        'our',
                            +        'own',
                            +        'rather',
                            +        'said',
                            +        'say',
                            +        'says',
                            +        'she',
                            +        'should',
                            +        'since',
                            +        'so',
                            +        'some',
                            +        'than',
                            +        'that',
                            +        'the',
                            +        'their',
                            +        'them',
                            +        'then',
                            +        'there',
                            +        'these',
                            +        'they',
                            +        'this',
                            +        'tis',
                            +        'to',
                            +        'too',
                            +        'twas',
                            +        'us',
                            +        'wants',
                            +        'was',
                            +        'we',
                            +        'were',
                            +        'what',
                            +        'when',
                            +        'who',
                            +        'whom',
                            +        'why',
                            +        'will',
                            +        'would',
                            +        'yet',
                            +        'you',
                            +        'your'
                            +        ])
                            +
                            +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                            +    // would not find anything if searching for "add!", only for the entire qualification
                            +    lunr.tokenizer.separator = /[\s\-\.]+/
                            +
                            +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                            +    lunr.trimmer = function (token) {
                            +        return token.update(function (s) {
                            +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                            +        })
                            +    }
                            +
                            +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                            +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                            +
                            +    var index = lunr(function () {
                            +        this.ref('location')
                            +        this.field('title')
                            +        this.field('text')
                            +        documenterSearchIndex['docs'].forEach(function(e) {
                            +            this.add(e)
                            +        }, this)
                            +    })
                            +    var store = {}
                            +
                            +    documenterSearchIndex['docs'].forEach(function(e) {
                            +        store[e.location] = {title: e.title, category: e.category}
                            +    })
                            +
                            +    $(function(){
                            +        function update_search(querystring) {
                            +            tokens = lunr.tokenizer(querystring)
                            +            results = index.query(function (q) {
                            +                tokens.forEach(function (t) {
                            +                    q.term(t.toString(), {
                            +                        fields: ["title"],
                            +                        boost: 100,
                            +                        usePipeline: false,
                            +                        editDistance: 0,
                            +                        wildcard: lunr.Query.wildcard.NONE
                            +                    })
                            +                    q.term(t.toString(), {
                            +                        fields: ["title"],
                            +                        boost: 10,
                            +                        usePipeline: false,
                            +                        editDistance: 2,
                            +                        wildcard: lunr.Query.wildcard.NONE
                            +                    })
                            +                    q.term(t.toString(), {
                            +                        fields: ["text"],
                            +                        boost: 1,
                            +                        usePipeline: true,
                            +                        editDistance: 0,
                            +                        wildcard: lunr.Query.wildcard.NONE
                            +                    })
                            +                })
                            +            })
                            +            $('#search-info').text("Number of results: " + results.length)
                            +            $('#search-results').empty()
                            +            results.forEach(function(result) {
                            +                data = store[result.ref]
                            +                link = $('')
                            +                link.text(data.title)
                            +                link.attr('href', documenterBaseURL+'/'+result.ref)
                            +                cat = $('('+data.category+')')
                            +                li = $('
                          • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.6/index.html b/v0.11.6/index.html new file mode 100644 index 00000000..d15c7f2e --- /dev/null +++ b/v0.11.6/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                            Home

                            MathematicalSystems.jl

                            MathematicalSystems is a Julia package for mathematical systems interfaces.

                            Features

                            • Generic and flexible systems definitions, while being fast and type stable.
                            • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                            • Iterator interfaces to handle constant or time-varying inputs.

                            Library Outline

                            diff --git a/v0.11.6/lib/internals/index.html b/v0.11.6/lib/internals/index.html new file mode 100644 index 00000000..04b2ea09 --- /dev/null +++ b/v0.11.6/lib/internals/index.html @@ -0,0 +1,58 @@ + +Internals · MathematicalSystems.jl

                            Internals

                            Internals

                            This section describes functions that are internal to the library.

                            Expression handling

                            _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                            Return the system type whose field names match those in fields.

                            Input

                            • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                            • fields – tuple of field names

                            Output

                            The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                            Examples

                            julia> using MathematicalSystems: _corresponding_type
                            +
                            +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                            +LinearContinuousSystem
                            +
                            +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                            +ConstrainedLinearControlContinuousSystem
                            source
                            _capture_dim(expr)

                            Return the tuple containing the dimension(s) in expr.

                            Input

                            • expr – symbolic expression that can be of any of the following forms:

                              • :x or :(x) – state dimension
                              • :(x, u) – state and input dimension
                              • :(x, u, w) – state, input and noise dimensions

                            Output

                            • The scalar x if expr specifies the state dimension.
                            • The vector [x, u] if expr specifies state and input dimension.
                            • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                            source
                            extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                            Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                            For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                            • (:A_user, :A)
                            • (:B_user, :B)
                            • (:c_user, :c)
                            • (:D_user, :D)
                            • (:f_user, :f)
                            • (:statedim_user :statedim)
                            • (:inputdim_user :inputdim)
                            • (:noisedim_user :noisedim)

                            and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                            Input

                            • equation – dynamic equation
                            • state – state variable
                            • input – input variable
                            • noise – noise variable
                            • dim – dimensionality
                            • AT – abstract system type

                            Output

                            Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                            source
                            add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                            Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                            Input

                            • summand – expressions
                            • state – state variable
                            • input – input variable
                            • noise – noise variable

                            Output

                            Multiplication expression or symbol.

                            Example

                            julia> using MathematicalSystems: add_asterisk
                            +
                            +julia> add_asterisk(:(A1*x), :x, :u, :w)
                            +:(A1 * x)
                            +
                            +julia> add_asterisk(:(c1), :x, :u, :w)
                            +:c1
                            +
                            +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                            +:(A * x1)
                            +
                            +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                            +:(A * wb)
                            +
                            +julia> add_asterisk(:(A1u), :x, :u, :w)
                            +:(A1 * u)
                            +
                            +julia> add_asterisk(:(A1ub), :x, :u, :w)
                            +:A1ub
                            source
                            Base.sortFunction.
                            sort(parameters::Vector, order::Tuple)

                            Filter and sort the vector parameters according to order.

                            Input

                            • parameters – vector of tuples
                            • order – tuple of symbols

                            Output

                            A new vector of tuples corresponding to parameters filtered and sorted according to order.

                            Examples

                            julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                            +
                            +julia> sort(parameters, (:X, :U, :W))
                            +3-element Array{Tuple{Any,Symbol},1}:
                            + (:X1, :X)
                            + (:U1, :U)
                            + (:W1, :W)
                            +
                            +julia>  parameters = [(:const, :c), (:A, :A)];
                            +
                            +julia> sort(parameters, (:A, :B, :c, :D))
                            +2-element Array{Tuple{Any,Symbol},1}:
                            + (:A, :A)
                            + (:const, :c)

                            Notes

                            parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                            If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                            source

                            Querying expressions

                            is_equation(expr)

                            Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                            Input

                            • expr – expression

                            Output

                            A Bool indicating whether expr is an equation or not.

                            source
                            extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                            Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                            Input

                            • summands – array of expressions
                            • state – state variable
                            • input – input variable
                            • noise – noise variable

                            Output

                            Array of tuples of symbols with variable name and field name.

                            Example

                            julia> using MathematicalSystems: extract_sum
                            +
                            +julia> extract_sum([:(A1*x)], :x, :u, :w)
                            +1-element Array{Tuple{Any,Symbol},1}:
                            + (:(hcat(A1)), :A)
                            +
                            +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                            +3-element Array{Tuple{Any,Symbol},1}:
                            + (:(hcat(A1)), :A)
                            + (:(hcat(B1)), :B)
                            + (:(vcat(c)), :c)
                            +
                            +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                            +3-element Array{Tuple{Any,Symbol},1}:
                            + (:(hcat(A1)), :A)
                            + (:(hcat(B1)), :B)
                            + (:(hcat(B2)), :D)

                            Notes

                            If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                            If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                            Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                            source

                            Evaluation of AbstractSystem at given state

                            _instantiate(system::AbstractSystem, x::AbstractVector;
                            +            [check_constraints]=true)

                            Return the result of instantiating an AbstractSystem at the current state.

                            Input

                            • systemAbstractSystem
                            • x – state (it should be any vector type)
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The result of applying the system to state x.

                            Notes

                            The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                            source
                            _instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;
                            +            [check_constraints]=true)

                            Return the result of instantiating an AbstractSystem at the current state and applying one input.

                            Input

                            • systemAbstractSystem
                            • x – state (it should be any vector type)
                            • u – input (it should be any vector type) or noise, if system is not controlled
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The result of applying the system to state x and input u.

                            Notes

                            If the system is not controlled but noisy, the input u is interpreted as noise.

                            The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                            source
                            _instantiate(system::AbstractSystem,
                            +            x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                            Return the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.

                            Input

                            • systemAbstractSystem
                            • x – state (it should be any vector type)
                            • u – input (it should be any vector type)
                            • w – noise (it should be any vector type)
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The result of applying the system to state x, input u and noise w.

                            Notes

                            The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                            source

                            Naming convention for systems' fields

                            Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                            FieldDescriptionGetter function
                            Astate matrixstate_matrix
                            Binput matrixinput_matrix
                            caffine termaffine_term
                            Dnoise matrixnoise_matrix
                            Xstate constraintsstateset
                            Uinput constraintsinputset
                            Wdisturbance setnoiseset
                            diff --git a/v0.11.6/lib/methods/index.html b/v0.11.6/lib/methods/index.html new file mode 100644 index 00000000..6064e7fb --- /dev/null +++ b/v0.11.6/lib/methods/index.html @@ -0,0 +1,17 @@ + +Methods · MathematicalSystems.jl

                            Methods

                            Methods

                            This section describes systems methods implemented in MathematicalSystems.jl.

                            States

                            statedim(s::AbstractSystem)

                            Returns the dimension of the state space of system s.

                            source
                            stateset(s::AbstractSystem)

                            Returns the set of allowed states of system s.

                            source

                            Inputs

                            inputdim(s::AbstractSystem)

                            Returns the dimension of the input space of system s.

                            source
                            inputset(s::AbstractSystem)

                            Returns the set of allowed inputs of system s.

                            source
                            nextinput(input::ConstantInput, n::Int=1)

                            Returns the first n elements of this input.

                            Input

                            • input – a constant input
                            • n – (optional, default: 1) the number of desired elements

                            Output

                            A repeated iterator that generates n equal samples of this input.

                            source
                            nextinput(input::VaryingInput, n::Int=1)

                            Returns the first n elements of this input.

                            Input

                            • input – varying input
                            • n – (optional, default: 1) number of desired elements

                            Output

                            An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                            source

                            Output

                            outputdim(m::AbstractMap)

                            Returns the dimension of the output space of the map m.

                            source
                            outputmap(s::SystemWithOutput)

                            Returns the output map of a system with output.

                            source

                            Traits

                            islinear(s::AbstractSystem)

                            Specifies if the dynamics of system s is specified by linear equations.

                            Notes

                            We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                            The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                            [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                            source
                            islinear(m::AbstractMap)

                            Specifies if the map m is linear or not.

                            Notes

                            A map is linear if it preserves the operations of scalar multiplication and vector addition.

                            source
                            isaffine(s::AbstractSystem)

                            Specifies if the dynamics of system s is specified by affine equations.

                            Notes

                            An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                            The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                            source
                            ispolynomial(s::AbstractSystem)

                            Specifies if the dynamics of system s is specified by polynomial equations.

                            The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                            source
                            isaffine(m::AbstractMap)

                            Specifies if the map m is affine or not.

                            Notes

                            An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                            source
                            isblackbox(s::AbstractSystem)

                            Specifies if no specific structure is assumed for the dynamics of system s.

                            The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                            source
                            isnoisy(s::AbstractSystem)

                            Determines if the dynamics of system s contains a noise term w.

                            The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                            source
                            iscontrolled(s::AbstractSystem)

                            Determines if the dynamics of system s contains a control input u.

                            The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                            source
                            isconstrained(s::AbstractSystem)

                            Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                            The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                            source
                            state_matrix(::AbstractSystem)

                            Return the state matrix of an affine system.

                            Notes

                            The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                            source
                            input_matrix(::AbstractSystem)

                            Return the input matrix of a system with linear input.

                            Notes

                            The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                            source
                            noise_matrix(::AbstractSystem)

                            Return the noise matrix of a system with linear noise.

                            Notes

                            The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                            source
                            affine_term(::AbstractSystem)

                            Return the affine term in an affine system.

                            Notes

                            The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                            source

                            Maps

                            apply(m::AbstractMap, args...)

                            Apply the rule specified by the map to the given arguments.

                            source

                            Successor

                            successor(system::DiscreteIdentitySystem, x::AbstractVector)

                            Return the successor state of a DiscreteIdentitySystem.

                            Input

                            • systemDiscreteIdentitySystem
                            • x – state (it should be any vector type)

                            Output

                            The same state x.

                            source
                            successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                            +          [check_constraints]=true)

                            Return the successor state of a ConstrainedDiscreteIdentitySystem.

                            Input

                            • systemConstrainedDiscreteIdentitySystem
                            • x – state (it should be any vector type)
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The same state x.

                            source
                            successor(system::AbstractDiscreteSystem, x::AbstractVector;
                            +          [check_constraints]=true)

                            Return the successor state of an AbstractDiscreteSystem.

                            Input

                            • systemAbstractDiscreteSystem
                            • x – state (it should be any vector type)
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The result of applying the system to state x.

                            source
                            successor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;
                            +          [check_constraints]=true)

                            Return the successor state of an AbstractDiscreteSystem.

                            Input

                            • systemAbstractDiscreteSystem
                            • x – state (it should be any vector type)
                            • u – input (it should be any vector type) or noise, if system is not controlled
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The result of applying the system to state x and input u.

                            Notes

                            If the system is not controlled but noisy, the input u is interpreted as noise.

                            source
                            successor(system::AbstractDiscreteSystem,
                            +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                            Return the successor state of an AbstractDiscreteSystem.

                            Input

                            • systemAbstractDiscreteSystem
                            • x – state (it should be any vector type)
                            • u – input (it should be any vector type)
                            • w – noise (it should be any vector type)
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The result of applying the system to state x, input u and noise w.

                            source

                            Vector Field

                            vector_field(system::ContinuousIdentitySystem, x::AbstractVector)

                            Return the vector field state of a ContinuousIdentitySystem.

                            Input

                            • systemContinuousIdentitySystem
                            • x – state (it should be any vector type)

                            Output

                            A zeros vector of dimension statedim.

                            source
                            vector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;
                            +          [check_constraints]=true)

                            Return the vector field state of a ConstrainedContinuousIdentitySystem.

                            Input

                            • systemConstrainedContinuousIdentitySystem
                            • x – state (it should be any vector type)
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            A zeros vector of dimension statedim.

                            source
                            vector_field(system::AbstractContinuousSystem, x::AbstractVector;
                            +          [check_constraints]=true)

                            Return the vector field state of an AbstractContinuousSystem.

                            Input

                            • systemAbstractContinuousSystem
                            • x – state (it should be any vector type)
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The vector field of the system at state x.

                            source
                            vector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;
                            +          [check_constraints]=true)

                            Return the vector field state of an AbstractContinuousSystem.

                            Input

                            • systemAbstractContinuousSystem
                            • x – state (it should be any vector type)
                            • u – input (it should be any vector type) or noise, if system is not controlled
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The vector field of the system at state x and applying input u.

                            Notes

                            If the system is not controlled but noisy, the input u is interpreted as noise.

                            source
                            vector_field(system::AbstractContinuousSystem,
                            +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                            Return the vector field state of an AbstractContinuousSystem.

                            Input

                            • systemAbstractContinuousSystem
                            • x – state (it should be any vector type)
                            • u – input (it should be any vector type)
                            • w – noise (it should be any vector type)
                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                            Output

                            The vector field of the system at state x and applying input u and noise w.

                            source

                            Discretization

                            discretize(system::AbstractContinuousSystem, ΔT::Real,
                            +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                            +           constructor=_default_complementary_constructor(system))

                            Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                            Input

                            • system – an affine continuous system
                            • ΔT – sampling time
                            • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                            • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                            Output

                            Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                            source

                            Internal Methods

                            _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                            +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                            Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                            Input

                            • `` – discretization algorithm, used for dispatch
                            • ΔT – sampling time
                            • A – state matrix
                            • B – input matrix
                            • c – vector
                            • D – noise matrix

                            Output

                            Returns a vector containing the discretized input arguments A, B, c and D.

                            Notes

                            See discretize for more details.

                            source
                            _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                            Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                            Input

                            • A – state matrix
                            • ΔT – sampling time
                            • algorithm – (optional, default: :exact) discretization algorithm

                            Output

                            Returns a vector containing the discretized input argument A.

                            Notes

                            See discretize for more details.

                            source
                            _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                            +            A::AbstractMatrix, B::AbstractMatrix)

                            Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                            Input

                            • algorithm – discretization algorithm
                            • ΔT – sampling time
                            • A – state matrix
                            • B – input or noise matrix

                            Output

                            Returns a vector containing the discretized input arguments A and B.

                            Notes

                            This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                            See discretize for more details.

                            source
                            _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                            +            A::AbstractMatrix,c::AbstractVector)

                            Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                            Input

                            • algorithm – discretization algorithm
                            • ΔT – sampling time
                            • A – state matrix
                            • c – vector

                            Output

                            Returns a vector containing the discretized input arguments A and c.

                            Notes

                            See discretize for more details.

                            source
                            _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                            +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                            Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                            Input

                            • algorithm – discretization algorithm
                            • ΔT – sampling time
                            • A – state matrix
                            • B – input matrix
                            • c – vector

                            Output

                            Returns a vector containing the discretized input arguments A, B and c.

                            Notes

                            See discretize for more details.

                            source
                            _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                            +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                            Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                            Input

                            • algorithm – discretization algorithm
                            • ΔT – sampling time
                            • A – state matrix
                            • B – input matrix
                            • D – noise matrix

                            Output

                            Returns a vector containing the discretized input arguments A, B and D.

                            Notes

                            See discretize for more details.

                            source
                            typename(system::AbstractSystem)

                            Returns the base type of system without parameter information.

                            Input

                            • systemAbstractSystem

                            Output

                            The base type of system.

                            source
                            _complementary_type(system_type::Type{<:AbstractSystem})

                            Return the complementary type of a system type system_type.

                            Input

                            • system_type – type of AbstractSystem

                            Ouput

                            Return complementary type of system_type.

                            Notes

                            There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                            To get the complementary type of system type, use _complementary_type(typename(system)).

                            source
                            diff --git a/v0.11.6/lib/types/index.html b/v0.11.6/lib/types/index.html new file mode 100644 index 00000000..fcb83a5d --- /dev/null +++ b/v0.11.6/lib/types/index.html @@ -0,0 +1,127 @@ + +Types · MathematicalSystems.jl

                            Types

                            Types

                            This section describes systems types implemented in MathematicalSystems.jl.

                            Abstract Systems

                            AbstractSystem

                            Abstract supertype for all system types.

                            source
                            AbstractContinuousSystem

                            Abstract supertype for all continuous system types.

                            source
                            AbstractDiscreteSystem

                            Abstract supertype for all discrete system types.

                            source

                            Continuous Systems

                            ContinuousIdentitySystem <: AbstractContinuousSystem

                            Trivial identity continuous-time system of the form:

                            \[ x(t)' = 0 \; \forall t.\]

                            Fields

                            • statedim – number of state variables
                            source
                            ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                            Trivial identity continuous-time system with domain constraints of the form:

                            \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                            Fields

                            • statedim – number of state variables
                            • X – state constraints
                            source
                            LinearContinuousSystem

                            Continuous-time linear system of the form:

                            \[ x(t)' = A x(t) \; \forall t.\]

                            Fields

                            • A – state matrix
                            source
                            AffineContinuousSystem

                            Continuous-time affine system of the form:

                            \[ x(t)' = A x(t) + c \; \forall t.\]

                            Fields

                            • A – state matrix
                            • c – affine term
                            source
                            LinearControlContinuousSystem

                            Continuous-time linear control system of the form:

                            \[ x(t)' = A x(t) + B u(t) \; \forall t.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            source
                            ConstrainedLinearContinuousSystem

                            Continuous-time linear system with domain constraints of the form:

                            \[ x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                            Fields

                            • A – state matrix
                            • X – state constraints
                            source
                            ConstrainedAffineContinuousSystem

                            Continuous-time affine system with domain constraints of the form:

                            \[ x(t)' = A x(t) + c, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                            Fields

                            • A – state matrix
                            • c – affine term
                            • X – state constraints
                            source
                            ConstrainedAffineControlContinuousSystem

                            Continuous-time affine control system with domain constraints of the form:

                            \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • c – affine term
                            • X – state constraints
                            • U – input constraints
                            source
                            ConstrainedLinearControlContinuousSystem

                            Continuous-time linear control system with domain constraints of the form:

                            \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • X – state constraints
                            • U – input constraints
                            source
                            LinearAlgebraicContinuousSystem

                            Continuous-time linear algebraic system of the form:

                            \[ E x(t)' = A x(t) \; \forall t.\]

                            Fields

                            • A – state matrix
                            • E – matrix, same size as A
                            source
                            ConstrainedLinearAlgebraicContinuousSystem

                            Continuous-time linear system with domain constraints of the form:

                            \[ E x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                            Fields

                            • A – state matrix
                            • E – matrix, same size as A
                            • X – state constraints
                            source
                            PolynomialContinuousSystem

                            Continuous-time polynomial system of the form:

                            \[ x(t)' = p(x(t)) \; \forall t.\]

                            Fields

                            • p – polynomial vector field
                            • statedim – number of state variables
                            source
                            ConstrainedPolynomialContinuousSystem

                            Continuous-time polynomial system with domain constraints:

                            \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                            Fields

                            • p – polynomial vector field
                            • X – constraint set
                            • statedim – number of state variables
                            source
                            BlackBoxContinuousSystem <: AbstractContinuousSystem

                            Continuous-time system defined by a right-hand side of the form:

                            \[ x(t)' = f(x(t)) \; \forall t.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            source
                            ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                            Continuous-time system defined by a right-hand side with domain constraints of the form:

                            \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • X – state constraints
                            source
                            BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                            Continuous-time control system defined by a right-hand side of the form:

                            \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • inputdim – number of input variables
                            source
                            ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                            Continuous-time control system defined by a right-hand side with domain constraints of the form:

                            \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • inputdim – number of input variables
                            • X – state constraints
                            • U – input constraints
                            source
                            NoisyLinearContinuousSystem

                            Continuous-time linear system with additive disturbance of the form:

                            \[ x(t)' = A x(t) + D w(t) \; \forall t.\]

                            Fields

                            • A – state matrix
                            • D – noise matrix
                            source
                            NoisyConstrainedLinearContinuousSystem

                            Continuous-time linear system with additive disturbance and domain constraints of the form:

                            \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                            Fields

                            • A – state matrix
                            • D – noise matrix
                            • X – state constraints
                            • W – disturbance set
                            source
                            NoisyLinearControlContinuousSystem

                            Continuous-time linear control system with additive disturbance of the form:

                            \[ x(t)' = A x(t) + B u(t) + D w(t) \; \forall t.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • D – noise matrix
                            source
                            NoisyConstrainedLinearControlContinuousSystem

                            Continuous-time linear control system with additive disturbance and domain constraints of the form:

                            \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • D – noise matrix
                            • X – state constraints
                            • U – input constraints
                            • W – disturbance set
                            source
                            NoisyAffineControlContinuousSystem

                            Continuous-time affine control system with additive disturbance of the form:

                            \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • c – affine term
                            • D – noise matrix
                            source
                            NoisyConstrainedAffineControlContinuousSystem

                            Continuous-time affine control system with additive disturbance and domain constraints of the form:

                            \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • c – affine term
                            • D – noise matrix
                            • X – state constraints
                            • U – input constraints
                            • W – disturbance set
                            source
                            NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                            Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                            \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • inputdim – number of input variables
                            • noisedim – number of noise variables
                            source
                            NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                            Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                            \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • inputdim – number of input variables
                            • noisedim – number of noise variables
                            • X – state constraints
                            • U – input constraints
                            • W – disturbance set
                            source
                            SecondOrderLinearContinuousSystem

                            Continuous-time second order linear system of the form:

                            \[ Mx''(t) + Cx'(t) + Kx(t) = 0\; \forall t.\]

                            Fields

                            • M – mass matrix
                            • C – viscosity matrix
                            • K – stiffness matrix
                            source
                            SecondOrderAffineContinuousSystem

                            Continuous-time second order affine system of the form:

                            \[ Mx''(t) + Cx'(t) + Kx(t) = b\; \forall t.\]

                            Fields

                            • M – mass matrix
                            • C – viscosity matrix
                            • K – stiffness matrix
                            • b – affine term
                            source
                            SecondOrderConstrainedAffineControlContinuousSystem

                            Continuous-time second order constrained affine control system of the form:

                            \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t) + d, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                            Fields

                            • M – mass matrix
                            • C – viscosity matrix
                            • K – stiffness matrix
                            • B – input matrix
                            • d – affine term
                            • X – state constraints
                            • U – input constraints
                            source
                            SecondOrderConstrainedLinearControlContinuousSystem

                            Continuous-time second order constrained linear control system of the form:

                            \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                            Fields

                            • M – mass matrix
                            • C – viscosity matrix
                            • K – stiffness matrix
                            • B – input matrix
                            • X – state constraints
                            • U – input constraints
                            source

                            Discrete Systems

                            DiscreteIdentitySystem <: AbstractDiscreteSystem

                            Trivial identity discrete-time system of the form:

                            \[ x_{k+1} = x_k \; \forall k.\]

                            Fields

                            • statedim – number of state variables
                            source
                            ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                            Trivial identity discrete-time system with domain constraints of the form:

                            \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                            Fields

                            • statedim – number of state variables
                            • X – state constraints
                            source
                            LinearDiscreteSystem

                            Discrete-time linear system of the form:

                            \[ x_{k+1} = A x_k \; \forall k.\]

                            Fields

                            • A – state matrix
                            source
                            AffineDiscreteSystem

                            Discrete-time affine system of the form:

                            \[ x_{k+1} = A x_k + c \; \forall k.\]

                            Fields

                            • A – state matrix
                            • c – affine term
                            source
                            LinearControlDiscreteSystem

                            Discrete-time linear control system of the form:

                            \[ x_{k+1} = A x_k + B u_k \; \forall k.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            source
                            ConstrainedLinearDiscreteSystem

                            Discrete-time linear system with domain constraints of the form:

                            \[ x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                            Fields

                            • A – state matrix
                            • X – state constraints
                            source
                            ConstrainedAffineDiscreteSystem

                            Discrete-time affine system with domain constraints of the form:

                            \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                            Fields

                            • A – state matrix
                            • c – affine term
                            • X – state constraints
                            source
                            ConstrainedLinearControlDiscreteSystem

                            Discrete-time linear control system with domain constraints of the form:

                            \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • X – state constraints
                            • U – input constraints
                            source
                            ConstrainedAffineControlDiscreteSystem

                            Continuous-time affine control system with domain constraints of the form:

                            \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • c – affine term
                            • X – state constraints
                            • U – input constraints
                            source
                            LinearAlgebraicDiscreteSystem

                            Discrete-time linear algebraic system of the form:

                            \[ E x_{k+1} = A x_k \; \forall k.\]

                            Fields

                            • A – state matrix
                            • E – matrix, same size as A
                            source
                            ConstrainedLinearAlgebraicDiscreteSystem

                            Discrete-time linear system with domain constraints of the form:

                            \[ E x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                            Fields

                            • A – state matrix
                            • E – matrix, same size as A
                            • X – state constraints
                            source
                            PolynomialDiscreteSystem

                            Discrete-time polynomial system of the form:

                            \[ x_{k+1} = p(x_k) \; \forall k.\]

                            Fields

                            • p – polynomial vector field
                            • statedim – number of state variables
                            source
                            ConstrainedPolynomialDiscreteSystem

                            Discrete-time polynomial system with domain constraints:

                            \[ x_{k+1} = p(x_k), \;  x_k ∈ \mathcal{X} \; \forall k.\]

                            Fields

                            • p – polynomial
                            • X – constraint set
                            • statedim – number of state variables
                            source
                            BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                            Discrete-time system defined by a right-hand side of the form:

                            \[ x_{k+1} = f(x_k) \; \forall k.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            source
                            ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                            Discrete-time system defined by a right-hand side with domain constraints of the form:

                            \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • X – state constraints
                            source
                            BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                            Discrete-time control system defined by a right-hand side of the form:

                            \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • inputdim – number of input variables
                            source
                            ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                            Discrete-time control system defined by a right-hand side with domain constraints of the form:

                            \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • inputdim – number of input variables
                            • X – state constraints
                            • U – input constraints
                            source
                            NoisyLinearDiscreteSystem

                            Discrete-time linear system with additive disturbance of the form:

                            \[ x_{k+1} = A x_k + D w_k \; \forall k.\]

                            Fields

                            • A – state matrix
                            • D – noise matrix
                            source
                            NoisyConstrainedLinearDiscreteSystem

                            Discrete-time linear system with additive disturbance and domain constraints of the form:

                            \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                            Fields

                            • A – state matrix
                            • D – noise matrix
                            • X – state constraints
                            • W – disturbance set
                            source
                            NoisyLinearControlDiscreteSystem

                            Continuous-time linear control system with additive disturbance of the form:

                            \[ x_{k+1} = A x_k + B u_k + D w_k \; \forall k.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • D – noise matrix
                            source
                            NoisyConstrainedLinearControlDiscreteSystem

                            Continuous-time linear control system with additive disturbance and domain constraints of the form:

                            \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • D – noise matrix
                            • X – state constraints
                            • U – input constraints
                            • W – disturbance set
                            source
                            NoisyAffineControlDiscreteSystem

                            Continuous-time affine control system with additive disturbance of the form:

                            \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • c – affine term
                            • D – noise matrix
                            source
                            NoisyConstrainedAffineControlDiscreteSystem

                            Continuous-time affine control system with additive disturbance and domain constraints of the form:

                            \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                            Fields

                            • A – state matrix
                            • B – input matrix
                            • c – affine term
                            • D – noise matrix
                            • X – state constraints
                            • U – input constraints
                            • W – disturbance set
                            source
                            NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                            Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                            \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • inputdim – number of input variables
                            • noisedim – number of noise variables
                            source
                            NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                            Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                            \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                            Fields

                            • f – function that holds the right-hand side
                            • statedim – number of state variables
                            • inputdim – number of input variables
                            • noisedim – number of noise variables
                            • X – state constraints
                            • U – input constraints
                            • W – disturbance set
                            source
                            SecondOrderLinearDiscreteSystem

                            Discrete-time second order linear system of the form:

                            \[ Mx_{k+2} + Cx_{k+1} + Kx_k = 0\; \forall k.\]

                            Fields

                            • M – mass matrix
                            • C – viscosity matrix
                            • K – stiffness matrix
                            source
                            SecondOrderAffineDiscreteSystem

                            Discrete-time second order affine system of the form:

                            \[ Mx_{k+2} + Cx_{k+1} + Kx_k = b\; \forall k.\]

                            Fields

                            • M – mass matrix
                            • C – viscosity matrix
                            • K – stiffness matrix
                            • b – affine term
                            source
                            SecondOrderConstrainedAffineControlDiscreteSystem

                            Discrete-time second order constrained affine control system of the form:

                            \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k + d, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                            Fields

                            • M – mass matrix
                            • C – viscosity matrix
                            • K – stiffness matrix
                            • B – input matrix
                            • d – affine term
                            • X – state constraints
                            • U – input constraints
                            source
                            SecondOrderConstrainedLinearControlDiscreteSystem

                            Discrete-time second order constrained linear control system of the form:

                            \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                            Fields

                            • M – mass matrix
                            • C – viscosity matrix
                            • K – stiffness matrix
                            • B – input matrix
                            • X – state constraints
                            • U – input constraints
                            source

                            Discretization Algorithms

                            AbstractDiscretizationAlgorithm

                            Abstract supertype for all discretization algorithms.

                            Note

                            For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                            _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                            +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                            are required.

                            source
                            ExactDiscretization <: AbstractDiscretizationAlgorithm

                            Exact discretization algorithm for affine systems.

                            Algorithm

                            This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                            Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                            The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                            The algorithm described above is a well known result from the literature [1].

                            [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                            source
                            EulerDiscretization <: AbstractDiscretizationAlgorithm

                            Euler discretization algorithm for affine systems.

                            Algorithm

                            This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                            Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                            The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                            The algorithm described above is a well known result from the literature [1].

                            [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                            source

                            System macro

                            system(expr...)

                            Return an instance of the system type corresponding to the given expressions.

                            Input

                            • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                            Output

                            A system that best matches the given expressions.

                            Notes

                            Terms. The expression expr contains one or more of the following sub-expressions:

                            • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                            • set constraints, e.g. x ∈ X
                            • input constraints, e.g. u ∈ U
                            • dimensionality, e.g. dim: (2,1) or dim = 1
                            • specification of the input variable, e.g. input: u or input = u
                            • specification of the noise variable, e,g, noise: w or noise = w

                            The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                            @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                            The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                            Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                            Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                            Exceptions. The following exceptions and particular cases apply:

                            • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                            • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                            • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                            Examples

                            Let us first create a continuous linear system using this macro:

                            julia> A = [1. 0; 0 1.];
                            +
                            +julia> @system(x' = A*x)
                            +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                            A discrete system is defined by using :

                            julia> @system(x⁺ = A*x)
                            +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                            Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                            julia> using LazySets
                            +
                            +julia> B = Matrix([1. 0.5]');
                            +
                            +julia> c = [1., 1.5];
                            +
                            +julia> X = BallInf(zeros(2), 10.);
                            +
                            +julia> U = BallInf(zeros(1), 2.);
                            +
                            +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                            +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                            For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                            julia> f(x, u) = x + u;
                            +
                            +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                            +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                            source

                            Initial-value problem macro

                            ivp(expr...)

                            Return an instance of the initial-value problem type corresponding to the given expressions.

                            Input

                            • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                            Output

                            An initial-value problem that best matches the given expressions.

                            Notes

                            This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                            The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

                            Examples

                            julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                            +
                            +julia> typeof(p)
                            +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                            +
                            +julia> initial_state(p)
                            +1-element Array{Float64,1}:
                            + 1.0
                            +
                            +julia> sys = @system(x' = [1 0; 0 1] * x);
                            +
                            +julia> @ivp(sys, x(0) ∈ [-1, 1])
                            +InitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])
                            source

                            Identity operator

                            IdentityMultiple{T} < AbstractMatrix{T} where T

                            A scalar multiple of the identity matrix of given order and numeric type.

                            Fields

                            • M – uniform scaling operator of type T
                            • n – size of the identity matrix

                            Notes

                            This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                            Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                            The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                            Examples

                            The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                            julia> using MathematicalSystems: IdentityMultiple
                            +
                            +julia> I2 = I(2)
                            +IdentityMultiple{Float64} of value 1.0 and order 2
                            +
                            +julia> I2 + I2
                            +IdentityMultiple{Float64} of value 2.0 and order 2
                            +
                            +julia> 4*I2
                            +IdentityMultiple{Float64} of value 4.0 and order 2

                            The numeric type (default Float64) can be passed as a second argument:

                            julia> I2r = I(2, Rational{Int})
                            +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                            +
                            +julia> I2r + I2r
                            +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                            +
                            +julia> 4*I2r
                            +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                            To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                            julia> I2 = I(2.0, 2)
                            +IdentityMultiple{Float64} of value 2.0 and order 2
                            +
                            +julia> I2r = I(2//1, 2)
                            +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                            Or use the constructor passing the UniformScaling (I):

                            julia> I2 = IdentityMultiple(2.0*I, 2)
                            +IdentityMultiple{Float64} of value 2.0 and order 2
                            +
                            +julia> I2r = IdentityMultiple(2//1*I, 2)
                            +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                            source

                            Initial Value Problems

                            InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                            Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                            Fields

                            • s – system
                            • x0 – initial state

                            Examples

                            The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                            julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                            +
                            +julia> x₀ = [-1/2, 1/2];
                            +
                            +julia> p = InitialValueProblem(s, x₀);
                            +
                            +julia> initial_state(p) # same as p.x0
                            +2-element Array{Float64,1}:
                            + -0.5
                            +  0.5
                            +
                            +julia> statedim(p)
                            +2
                            +
                            +julia> inputdim(p)
                            +0
                            source
                            IVP

                            IVP is an alias for InitialValueProblem.

                            source
                            initial_state(ivp::InitialValueProblem)

                            Return the initial state of an initial-value problem.

                            Input

                            • ivp – initial-value problem

                            Output

                            The initial state of an initial-value problem.

                            source
                            system(ivp::InitialValueProblem)

                            Return the system wrapped by an initial-value problem.

                            Input

                            • ivp – initial-value problem

                            Output

                            The system of the given initial-value problem.

                            source

                            Input Types

                            AbstractInput

                            Abstract supertype for all input types.

                            Notes

                            The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                            Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                            A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                            source
                            ConstantInput{UT} <: AbstractInput

                            Type representing an input that remains constant in time.

                            Fields

                            • U – input set

                            Examples

                            The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                            julia> c = ConstantInput(-1//2)
                            +ConstantInput{Rational{Int64}}(-1//2)
                            +
                            +julia> iterate(c, 1)
                            +(-1//2, nothing)
                            +
                            +julia> iterate(c, 2)
                            +(-1//2, nothing)
                            +
                            +julia> collect(nextinput(c, 4))
                            +4-element Array{Rational{Int64},1}:
                            + -1//2
                            + -1//2
                            + -1//2
                            + -1//2

                            The elements of this input are rational numbers:

                            julia> eltype(c)
                            +Rational{Int64}

                            To transform a constant input, you can use map as in:

                            julia> map(x->2*x, c)
                            +ConstantInput{Rational{Int64}}(-1//1)
                            source
                            VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                            Type representing an input that may vary with time.

                            Fields

                            • U – vector of input sets

                            Examples

                            The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                            julia> v = VaryingInput([-1//2, 1//2])
                            +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                            +
                            +julia> length(v)
                            +2
                            +
                            +julia> eltype(v)
                            +Rational{Int64}

                            Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                            julia> iterate(v, 1)
                            +(-1//2, 2)
                            +
                            +julia> iterate(v, 2)
                            +(1//2, 3)

                            The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                            julia> typeof(nextinput(v))
                            +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                            +
                            +julia> collect(nextinput(v, 1))
                            +1-element Array{Rational{Int64},1}:
                            + -1//2
                            +
                            +julia> collect(nextinput(v, 2))
                            +2-element Array{Rational{Int64},1}:
                            + -1//2
                            +  1//2

                            You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                            julia> collect(v)
                            +2-element Array{Rational{Int64},1}:
                            + -1//2
                            +  1//2
                            +
                            +julia> [2*vi for vi in v]
                            +2-element Array{Rational{Int64},1}:
                            + -1//1
                            +  1//1

                            Since this input type is finite, querying more elements than its length returns the full vector:

                            julia> collect(nextinput(v, 4))
                            +2-element Array{Rational{Int64},1}:
                            + -1//2
                            +  1//2

                            To transform a varying input, you can use map as in:

                            julia> map(x->2*x, v)
                            +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                            source

                            Maps

                            AbstractMap

                            Abstract supertype for all map types.

                            source
                            IdentityMap

                            An identity map,

                            \[ x ↦ x.\]

                            Fields

                            • dim – dimension
                            source
                            ConstrainedIdentityMap

                            An identity map with state constraints of the form:

                            \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                            Fields

                            • dim – dimension
                            • X – state constraints
                            source
                            LinearMap

                            A linear map,

                            \[ x ↦ Ax\]

                            Fields

                            • A – matrix
                            source
                            ConstrainedLinearMap

                            A linear map with state constraints of the form:

                            \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                            Fields

                            • A – matrix
                            • X – state constraints
                            source
                            AffineMap

                            An affine map,

                            \[ x ↦ Ax + c.\]

                            Fields

                            • A – matrix
                            • c – vector
                            source
                            ConstrainedAffineMap

                            An affine map with state constraints of the form:

                            \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                            Fields

                            • A – matrix
                            • c – vector
                            • X – state constraints
                            source
                            LinearControlMap

                            A linear control map,

                            \[ (x, u) ↦ Ax + Bu.\]

                            Fields

                            • A – matrix
                            • B – matrix
                            source
                            ConstrainedLinearControlMap

                            A linear control map with state and input constraints,

                            \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                            Fields

                            • A – matrix
                            • B – matrix
                            • X – state constraints
                            • U – input constraints
                            source
                            AffineControlMap

                            An affine control map,

                            \[ (x, u) ↦ Ax + Bu + c.\]

                            Fields

                            • A – matrix
                            • B – matrix
                            • c – vector
                            source
                            ConstrainedAffineControlMap

                            An affine control map with state and input constraints,

                            \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                            Fields

                            • A – matrix
                            • B – matrix
                            • c – vector
                            • X – state constraints
                            • U – input constraints
                            source
                            ResetMap

                            A reset map,

                            \[ x ↦ R(x),\]

                            such that a subset of the variables is given a specified value, and the rest are unchanged.

                            Fields

                            • dim – dimension
                            • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                            source
                            ConstrainedResetMap

                            A reset map with state constraints of the form:

                            \[ x ↦ R(x), x ∈ \mathcal{X},\]

                            such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                            Fields

                            • dim – dimension
                            • X – state constraints
                            • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                            source

                            Macros

                            map(ex, args)

                            Return an instance of the map type corresponding to the given expression.

                            Input

                            • ex – an expression defining the map, in the form of an anonymous function
                            • args – additional optional arguments

                            Output

                            A map that best matches the given expression.

                            Examples

                            Let us first create a linear map using this macro:

                            julia> @map x -> [1 0; 0 0]*x
                            +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                            We can create an affine system as well:

                            julia> @map x -> [1 0; 0 0]*x + [2, 0]
                            +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                            Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                            julia> @map(x -> x, dim=5)
                            +IdentityMap(5)

                            A state constraint on such map can be specified passing the additional argument x ∈ X.

                            An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                            julia> @map x -> I(5)*x
                            +IdentityMap(5)
                            source

                            Systems with output

                            SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                            Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                            Fields

                            • s – system of type ST
                            • outputmap – output map of type MT
                            source
                            LinearTimeInvariantSystem(A, B, C, D)

                            A linear time-invariant system with of the form

                            \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                            Input

                            • A – matrix
                            • B – matrix
                            • C – matrix
                            • D – matrix

                            Output

                            A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                            source
                            LinearTimeInvariantSystem(A, B, C, D, X, U)

                            A linear time-invariant system with state and input constraints of the form

                            \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                            where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                            Input

                            • A – matrix
                            • B – matrix
                            • C – matrix
                            • D – matrix
                            • X – state constraints
                            • U – input constraints

                            Output

                            A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                            source
                            LTISystem

                            LTISystem is an alias for LinearTimeInvariantSystem.

                            source

                            Vector Field

                            VectorField{T<:Function}

                            Type that computes the vector field of an AbstractContinuousSystem.

                            Fields

                            • field – function for calculating the vector field
                            source
                            diff --git a/v0.11.6/search/index.html b/v0.11.6/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.6/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                            Search

                            Search

                            Number of results: loading...

                              diff --git a/v0.11.6/search_index.js b/v0.11.6/search_index.js new file mode 100644 index 00000000..0a689580 --- /dev/null +++ b/v0.11.6/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Evaluation-of-AbstractSystem-at-given-state-1","page":"Internals","title":"Evaluation of AbstractSystem at given state","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_instantiate","category":"page"},{"location":"lib/internals/#MathematicalSystems._instantiate","page":"Internals","title":"MathematicalSystems._instantiate","text":"_instantiate(system::AbstractSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying one input.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem\nSecondOrderLinearContinuousSystem\nSecondOrderAffineContinuousSystem\nSecondOrderConstrainedAffineControlContinuousSystem\nSecondOrderConstrainedLinearControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearContinuousSystem","text":"SecondOrderLinearContinuousSystem\n\nContinuous-time second order linear system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = 0 forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineContinuousSystem","text":"SecondOrderAffineContinuousSystem\n\nContinuous-time second order affine system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = b forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","text":"SecondOrderConstrainedAffineControlContinuousSystem\n\nContinuous-time second order constrained affine control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t) + d  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","text":"SecondOrderConstrainedLinearControlContinuousSystem\n\nContinuous-time second order constrained linear control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem\nSecondOrderLinearDiscreteSystem\nSecondOrderAffineDiscreteSystem\nSecondOrderConstrainedAffineControlDiscreteSystem\nSecondOrderConstrainedLinearControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearDiscreteSystem","text":"SecondOrderLinearDiscreteSystem\n\nDiscrete-time second order linear system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = 0 forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineDiscreteSystem","text":"SecondOrderAffineDiscreteSystem\n\nDiscrete-time second order affine system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = b forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","text":"SecondOrderConstrainedAffineControlDiscreteSystem\n\nDiscrete-time second order constrained affine control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k + d  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","text":"SecondOrderConstrainedLinearControlDiscreteSystem\n\nDiscrete-time second order constrained linear control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro-1","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nA state constraint on such map can be specified passing the additional argument x ∈ X.\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Vector-Field-1","page":"Types","title":"Vector Field","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"VectorField","category":"page"},{"location":"lib/types/#MathematicalSystems.VectorField","page":"Types","title":"MathematicalSystems.VectorField","text":"VectorField{T<:Function}\n\nType that computes the vector field of an AbstractContinuousSystem.\n\nFields\n\nfield – function for calculating the vector field\n\n\n\n\n\n","category":"type"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisblackbox(::AbstractSystem)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isblackbox-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isblackbox","text":"isblackbox(s::AbstractSystem)\n\nSpecifies if no specific structure is assumed for the dynamics of system s.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Vector-Field-1","page":"Methods","title":"Vector Field","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"vector_field","category":"page"},{"location":"lib/methods/#MathematicalSystems.vector_field","page":"Methods","title":"MathematicalSystems.vector_field","text":"vector_field(system::ContinuousIdentitySystem, x::AbstractVector)\n\nReturn the vector field state of a ContinuousIdentitySystem.\n\nInput\n\nsystem – ContinuousIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of a ConstrainedContinuousIdentitySystem.\n\nInput\n\nsystem – ConstrainedContinuousIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s7} where #s7<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.6/siteinfo.js b/v0.11.6/siteinfo.js new file mode 100644 index 00000000..138b1c7c --- /dev/null +++ b/v0.11.6/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.6"; diff --git a/v0.11.7/about/index.html b/v0.11.7/about/index.html new file mode 100644 index 00000000..53f1576e --- /dev/null +++ b/v0.11.7/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                              About

                              About

                              This page contains some general information about this project, and recommendations about contributing.

                              Contributing

                              If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                              Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                              Branches and pull requests (PR)

                              We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                              Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                              Unit testing and continuous integration (CI)

                              This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                              When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                              $ julia --color=yes test/runtests.jl

                              Alternatively, you can achieve the same from inside the REPL using the following command:

                              julia> Pkg.test("MathematicalSystems")

                              We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                              Contributing to the documentation

                              New functions and types should be documented according to our guidelines directly in the source code.

                              You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                              julia> ?LinearContinuousSystem

                              This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                              To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                              $ julia --color=yes docs/make.jl

                              Note that this also runs all doctests which will take some time.

                              Related projects

                              This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                              Below we list more related projects.

                              Package nameDescription
                              HybridSystems.jlHybrid Systems definitions in Julia.
                              LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                              ControlToolbox.jlAnalysis and design tools for control systems.
                              ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                              DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                              ControlSystems.jlA Control Systems Toolbox for Julia
                              ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                              Credits

                              These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                              diff --git a/v0.11.7/assets/arrow.svg b/v0.11.7/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.7/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.7/assets/documenter.css b/v0.11.7/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.7/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                              the is very first thing on the page (i.e. the second element + * in the
                              , * after the
                              , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                               surrounding the , while
                              + * highlight.js applies the .hljs style directly to the  tag.
                              + */
                              +.hljs {
                              +    background-color: transparent;
                              +    padding: 0;
                              +}
                              +
                              +@media only screen and (max-width: 768px) {
                              +    nav.toc {
                              +        position: fixed;
                              +        width: 16em;
                              +        left: -16em;
                              +        -webkit-overflow-scrolling: touch;
                              +        -webkit-transition-property: left; /* Safari */
                              +        -webkit-transition-duration: 0.3s; /* Safari */
                              +        transition-property: left;
                              +        transition-duration: 0.3s;
                              +        -webkit-transition-timing-function: ease-out; /* Safari */
                              +        transition-timing-function: ease-out;
                              +        z-index: 2;
                              +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                              +    }
                              +
                              +    nav.toc.show {
                              +        left: 0;
                              +    }
                              +
                              +    article {
                              +        margin-left: 0;
                              +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                              +        overflow-wrap: break-word;
                              +    }
                              +
                              +    article > header {
                              +        position: fixed;
                              +        left: 0;
                              +        z-index: 1;
                              +    }
                              +
                              +    article > header nav, hr {
                              +        display: none;
                              +    }
                              +
                              +    article > header div#topbar {
                              +        display: block; /* is mobile */
                              +        position: fixed;
                              +        width: 100%;
                              +        height: 1.5em;
                              +        padding-top: 1em;
                              +        padding-bottom: 1em;
                              +        background-color: #fcfcfc;
                              +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                              +        top: 0;
                              +        -webkit-transition-property: top; /* Safari */
                              +        -webkit-transition-duration: 0.3s; /* Safari */
                              +        transition-property: top;
                              +        transition-duration: 0.3s;
                              +    }
                              +
                              +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                              +        top: -4em;
                              +        -webkit-transition-property: top; /* Safari */
                              +        -webkit-transition-duration: 0.7s; /* Safari */
                              +        transition-property: top;
                              +        transition-duration: 0.7s;
                              +    }
                              +
                              +    article > header div#topbar span {
                              +        width: 80%;
                              +        height: 1.5em;
                              +        margin-top: -0.1em;
                              +        margin-left: 0.9em;
                              +        font-size: 1.2em;
                              +        overflow: hidden;
                              +    }
                              +
                              +    article > header div#topbar a.fa-bars {
                              +        float: right;
                              +        padding: 0.6em;
                              +        margin-top: -0.6em;
                              +        margin-right: 0.3em;
                              +        font-size: 1.5em;
                              +    }
                              +
                              +    article > header div#topbar a.fa-bars:visited {
                              +        color: #3091d1;
                              +    }
                              +
                              +    article table {
                              +        overflow-x: auto;
                              +        display: block;
                              +    }
                              +
                              +    article div.MathJax_Display {
                              +        overflow: scroll;
                              +    }
                              +
                              +    article span.MathJax {
                              +        overflow: hidden;
                              +    }
                              +}
                              +
                              +@media only screen and (max-width: 320px) {
                              +    body {
                              +        font-size: 15px;
                              +    }
                              +}
                              diff --git a/v0.11.7/assets/documenter.js b/v0.11.7/assets/documenter.js
                              new file mode 100644
                              index 00000000..761ae294
                              --- /dev/null
                              +++ b/v0.11.7/assets/documenter.js
                              @@ -0,0 +1,132 @@
                              +/*
                              + * Part of Documenter.jl
                              + *     https://github.com/JuliaDocs/Documenter.jl
                              + *
                              + * License: MIT
                              + */
                              +
                              +requirejs.config({
                              +    paths: {
                              +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                              +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                              +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                              +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                              +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                              +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                              +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                              +    },
                              +    shim: {
                              +        'mathjax' : {
                              +            exports: "MathJax"
                              +        },
                              +        'highlight-julia': ['highlight'],
                              +        'highlight-julia-repl': ['highlight'],
                              +    }
                              +});
                              +
                              +// Load MathJax
                              +require(['mathjax'], function(MathJax) {
                              +    MathJax.Hub.Config({
                              +      "tex2jax": {
                              +        inlineMath: [['$','$'], ['\\(','\\)']],
                              +        processEscapes: true
                              +      }
                              +    });
                              +    MathJax.Hub.Config({
                              +      config: ["MMLorHTML.js"],
                              +      jax: [
                              +        "input/TeX",
                              +        "output/HTML-CSS",
                              +        "output/NativeMML"
                              +      ],
                              +      extensions: [
                              +        "MathMenu.js",
                              +        "MathZoom.js",
                              +        "TeX/AMSmath.js",
                              +        "TeX/AMSsymbols.js",
                              +        "TeX/autobold.js",
                              +        "TeX/autoload-all.js"
                              +      ]
                              +    });
                              +    MathJax.Hub.Config({
                              +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                              +    });
                              +})
                              +
                              +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                              +    $(document).ready(function() {
                              +        hljs.initHighlighting();
                              +    })
                              +
                              +})
                              +
                              +// update the version selector with info from the siteinfo.js and ../versions.js files
                              +require(['jquery'], function($) {
                              +    $(document).ready(function() {
                              +        var version_selector = $("#version-selector");
                              +
                              +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                              +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                              +            var option = $("");
                              +            version_selector.append(option);
                              +        }
                              +
                              +        if (typeof DOC_VERSIONS !== 'undefined') {
                              +            var existing_versions = $('#version-selector > option');
                              +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                              +            DOC_VERSIONS.forEach(function(each) {
                              +                var version_url = documenterBaseURL + "/../" + each;
                              +                var existing_id = $.inArray(each, existing_versions_texts);
                              +                // if not already in the version selector, add it as a new option,
                              +                // otherwise update the old option with the URL and enable it
                              +                if (existing_id == -1) {
                              +                    var option = $("");
                              +                    version_selector.append(option);
                              +                } else {
                              +                    var option = existing_versions[existing_id];
                              +                    option.value = version_url;
                              +                    option.disabled = false;
                              +                }
                              +            });
                              +        }
                              +
                              +        // only show the version selector if the selector has been populated
                              +        if ($('#version-selector > option').length > 0) {
                              +            version_selector.css("visibility", "visible");
                              +        }
                              +
                              +        // Scroll the navigation bar to the currently selected menu item
                              +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                              +    })
                              +
                              +})
                              +
                              +// mobile
                              +require(['jquery', 'headroom'], function($, Headroom) {
                              +    $(document).ready(function() {
                              +        var navtoc = $("nav.toc");
                              +        $("nav.toc li.current a.toctext").click(function() {
                              +            navtoc.toggleClass('show');
                              +        });
                              +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                              +            ev.preventDefault();
                              +            navtoc.toggleClass('show');
                              +            if (navtoc.hasClass('show')) {
                              +                var title = $("article > header div#topbar span").text();
                              +                $("nav.toc ul li a:contains('" + title + "')").focus();
                              +            }
                              +        });
                              +        $("article#docs").bind('click', function(ev) {
                              +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                              +                return;
                              +            }
                              +            if (navtoc.hasClass('show')) {
                              +                navtoc.removeClass('show');
                              +            }
                              +        });
                              +        if ($("article > header div#topbar").css('display') == 'block') {
                              +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                              +            headroom.init();
                              +        }
                              +    })
                              +})
                              diff --git a/v0.11.7/assets/juliareach.css b/v0.11.7/assets/juliareach.css
                              new file mode 100644
                              index 00000000..64b0d92d
                              --- /dev/null
                              +++ b/v0.11.7/assets/juliareach.css
                              @@ -0,0 +1,583 @@
                              +/*
                              + * The default CSS style for Documenter.jl generated sites
                              + *
                              + * Heavily inspired by the Julia Sphinx theme
                              + *     https://github.com/JuliaLang/JuliaDoc
                              + * which extends the sphinx_rtd_theme
                              + *     https://github.com/snide/sphinx_rtd_theme
                              + *
                              + * Part of Documenter.jl
                              + *     https://github.com/JuliaDocs/Documenter.jl
                              + *
                              + * License: MIT
                              + */
                              +
                              +/* The original CSS is modified such that it right-justifies the text. */
                              +
                              +/* fonts */
                              +body, input {
                              +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                              +  font-size: 16px;
                              +  color: #222;
                              +  text-rendering: optimizeLegibility;
                              +}
                              +
                              +pre, code, kbd {
                              +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                              +  font-size: 0.90em;
                              +}
                              +
                              +pre code {
                              +  font-size: 1em;
                              +}
                              +
                              +a {
                              +    color: #2980b9;
                              +    text-decoration: none;
                              +}
                              +
                              +a:hover {
                              +    color: #3091d1;
                              +}
                              +
                              +a:visited {
                              +    color: #9b59b6;
                              +}
                              +
                              +body {
                              +    line-height: 1.5;
                              +}
                              +
                              +h1 {
                              +    font-size: 1.75em;
                              +}
                              +
                              +/* Unless the 

                              the is very first thing on the page (i.e. the second element + * in the
                              , * after the
                              , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                               surrounding the , while
                              + * highlight.js applies the .hljs style directly to the  tag.
                              + */
                              +.hljs {
                              +    background-color: transparent;
                              +    padding: 0;
                              +}
                              +
                              +@media only screen and (max-width: 768px) {
                              +    nav.toc {
                              +        position: fixed;
                              +        overflow-y: scroll;
                              +        width: 16em;
                              +        left: -16em;
                              +        -webkit-overflow-scrolling: touch;
                              +        -webkit-transition-property: left; /* Safari */
                              +        -webkit-transition-duration: 0.3s; /* Safari */
                              +        transition-property: left;
                              +        transition-duration: 0.3s;
                              +        -webkit-transition-timing-function: ease-out; /* Safari */
                              +        transition-timing-function: ease-out;
                              +        z-index: 2;
                              +    }
                              +
                              +    nav.toc.show {
                              +        left: 0;
                              +    }
                              +
                              +    article {
                              +        margin-left: 0;
                              +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                              +        overflow-wrap: break-word;
                              +    }
                              +
                              +    article > header {
                              +        position: fixed;
                              +        left: 0;
                              +        z-index: 1;
                              +    }
                              +
                              +    article > header nav, hr {
                              +        display: none;
                              +    }
                              +
                              +    article > header div#topbar {
                              +        display: block; /* is mobile */
                              +        position: fixed;
                              +        width: 100%;
                              +        height: 1.5em;
                              +        padding-top: 1em;
                              +        padding-bottom: 1em;
                              +        background-color: #fcfcfc;
                              +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                              +        top: 0;
                              +        -webkit-transition-property: top; /* Safari */
                              +        -webkit-transition-duration: 0.3s; /* Safari */
                              +        transition-property: top;
                              +        transition-duration: 0.3s;
                              +    }
                              +
                              +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                              +        top: -4em;
                              +        -webkit-transition-property: top; /* Safari */
                              +        -webkit-transition-duration: 0.7s; /* Safari */
                              +        transition-property: top;
                              +        transition-duration: 0.7s;
                              +    }
                              +
                              +    article > header div#topbar span {
                              +        position: fixed;
                              +        width: 80%;
                              +        height: 1.5em;
                              +        margin-top: -0.1em;
                              +        margin-left: 0.9em;
                              +        font-size: 1.2em;
                              +        overflow: hidden;
                              +    }
                              +
                              +    article > header div#topbar a.fa-bars {
                              +        float: right;
                              +        padding: 0.6em;
                              +        margin-top: -0.6em;
                              +        margin-right: 0.3em;
                              +        font-size: 1.5em;
                              +    }
                              +
                              +    article > header div#topbar a.fa-bars:visited {
                              +        color: #3091d1;
                              +    }
                              +
                              +    article table {
                              +        overflow-x: auto;
                              +        display: block;
                              +    }
                              +
                              +    article div.MathJax_Display {
                              +        overflow: scroll;
                              +    }
                              +
                              +    article span.MathJax {
                              +        overflow: hidden;
                              +    }
                              +}
                              +
                              +@media only screen and (max-width: 320px) {
                              +    body {
                              +        font-size: 15px;
                              +    }
                              +}
                              diff --git a/v0.11.7/assets/search.js b/v0.11.7/assets/search.js
                              new file mode 100644
                              index 00000000..5d32c3aa
                              --- /dev/null
                              +++ b/v0.11.7/assets/search.js
                              @@ -0,0 +1,250 @@
                              +/*
                              + * Part of Documenter.jl
                              + *     https://github.com/JuliaDocs/Documenter.jl
                              + *
                              + * License: MIT
                              + */
                              +
                              +// parseUri 1.2.2
                              +// (c) Steven Levithan 
                              +// MIT License
                              +function parseUri (str) {
                              +	var	o   = parseUri.options,
                              +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                              +		uri = {},
                              +		i   = 14;
                              +
                              +	while (i--) uri[o.key[i]] = m[i] || "";
                              +
                              +	uri[o.q.name] = {};
                              +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                              +		if ($1) uri[o.q.name][$1] = $2;
                              +	});
                              +
                              +	return uri;
                              +};
                              +parseUri.options = {
                              +	strictMode: false,
                              +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                              +	q:   {
                              +		name:   "queryKey",
                              +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                              +	},
                              +	parser: {
                              +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                              +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                              +	}
                              +};
                              +
                              +requirejs.config({
                              +    paths: {
                              +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                              +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                              +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                              +    }
                              +});
                              +
                              +var currentScript = document.currentScript;
                              +
                              +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                              +    $("#search-form").submit(function(e) {
                              +        e.preventDefault()
                              +    })
                              +
                              +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                              +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                              +    // ideally we'd just filter the original list but it's not available as a variable
                              +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                              +        'a',
                              +        'able',
                              +        'about',
                              +        'across',
                              +        'after',
                              +        'almost',
                              +        'also',
                              +        'am',
                              +        'among',
                              +        'an',
                              +        'and',
                              +        'are',
                              +        'as',
                              +        'at',
                              +        'be',
                              +        'because',
                              +        'been',
                              +        'but',
                              +        'by',
                              +        'can',
                              +        'cannot',
                              +        'could',
                              +        'dear',
                              +        'did',
                              +        'does',
                              +        'either',
                              +        'ever',
                              +        'every',
                              +        'from',
                              +        'got',
                              +        'had',
                              +        'has',
                              +        'have',
                              +        'he',
                              +        'her',
                              +        'hers',
                              +        'him',
                              +        'his',
                              +        'how',
                              +        'however',
                              +        'i',
                              +        'if',
                              +        'into',
                              +        'it',
                              +        'its',
                              +        'just',
                              +        'least',
                              +        'like',
                              +        'likely',
                              +        'may',
                              +        'me',
                              +        'might',
                              +        'most',
                              +        'must',
                              +        'my',
                              +        'neither',
                              +        'no',
                              +        'nor',
                              +        'not',
                              +        'of',
                              +        'off',
                              +        'often',
                              +        'on',
                              +        'only',
                              +        'or',
                              +        'other',
                              +        'our',
                              +        'own',
                              +        'rather',
                              +        'said',
                              +        'say',
                              +        'says',
                              +        'she',
                              +        'should',
                              +        'since',
                              +        'so',
                              +        'some',
                              +        'than',
                              +        'that',
                              +        'the',
                              +        'their',
                              +        'them',
                              +        'then',
                              +        'there',
                              +        'these',
                              +        'they',
                              +        'this',
                              +        'tis',
                              +        'to',
                              +        'too',
                              +        'twas',
                              +        'us',
                              +        'wants',
                              +        'was',
                              +        'we',
                              +        'were',
                              +        'what',
                              +        'when',
                              +        'who',
                              +        'whom',
                              +        'why',
                              +        'will',
                              +        'would',
                              +        'yet',
                              +        'you',
                              +        'your'
                              +        ])
                              +
                              +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                              +    // would not find anything if searching for "add!", only for the entire qualification
                              +    lunr.tokenizer.separator = /[\s\-\.]+/
                              +
                              +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                              +    lunr.trimmer = function (token) {
                              +        return token.update(function (s) {
                              +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                              +        })
                              +    }
                              +
                              +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                              +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                              +
                              +    var index = lunr(function () {
                              +        this.ref('location')
                              +        this.field('title')
                              +        this.field('text')
                              +        documenterSearchIndex['docs'].forEach(function(e) {
                              +            this.add(e)
                              +        }, this)
                              +    })
                              +    var store = {}
                              +
                              +    documenterSearchIndex['docs'].forEach(function(e) {
                              +        store[e.location] = {title: e.title, category: e.category}
                              +    })
                              +
                              +    $(function(){
                              +        function update_search(querystring) {
                              +            tokens = lunr.tokenizer(querystring)
                              +            results = index.query(function (q) {
                              +                tokens.forEach(function (t) {
                              +                    q.term(t.toString(), {
                              +                        fields: ["title"],
                              +                        boost: 100,
                              +                        usePipeline: false,
                              +                        editDistance: 0,
                              +                        wildcard: lunr.Query.wildcard.NONE
                              +                    })
                              +                    q.term(t.toString(), {
                              +                        fields: ["title"],
                              +                        boost: 10,
                              +                        usePipeline: false,
                              +                        editDistance: 2,
                              +                        wildcard: lunr.Query.wildcard.NONE
                              +                    })
                              +                    q.term(t.toString(), {
                              +                        fields: ["text"],
                              +                        boost: 1,
                              +                        usePipeline: true,
                              +                        editDistance: 0,
                              +                        wildcard: lunr.Query.wildcard.NONE
                              +                    })
                              +                })
                              +            })
                              +            $('#search-info').text("Number of results: " + results.length)
                              +            $('#search-results').empty()
                              +            results.forEach(function(result) {
                              +                data = store[result.ref]
                              +                link = $('')
                              +                link.text(data.title)
                              +                link.attr('href', documenterBaseURL+'/'+result.ref)
                              +                cat = $('('+data.category+')')
                              +                li = $('
                            • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.7/index.html b/v0.11.7/index.html new file mode 100644 index 00000000..c0643302 --- /dev/null +++ b/v0.11.7/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                              Home

                              MathematicalSystems.jl

                              MathematicalSystems is a Julia package for mathematical systems interfaces.

                              Features

                              • Generic and flexible systems definitions, while being fast and type stable.
                              • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                              • Iterator interfaces to handle constant or time-varying inputs.

                              Library Outline

                              diff --git a/v0.11.7/lib/internals/index.html b/v0.11.7/lib/internals/index.html new file mode 100644 index 00000000..1c188ef0 --- /dev/null +++ b/v0.11.7/lib/internals/index.html @@ -0,0 +1,58 @@ + +Internals · MathematicalSystems.jl

                              Internals

                              Internals

                              This section describes functions that are internal to the library.

                              Expression handling

                              _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                              Return the system type whose field names match those in fields.

                              Input

                              • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                              • fields – tuple of field names

                              Output

                              The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                              Examples

                              julia> using MathematicalSystems: _corresponding_type
                              +
                              +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                              +LinearContinuousSystem
                              +
                              +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                              +ConstrainedLinearControlContinuousSystem
                              source
                              _capture_dim(expr)

                              Return the tuple containing the dimension(s) in expr.

                              Input

                              • expr – symbolic expression that can be of any of the following forms:

                                • :x or :(x) – state dimension
                                • :(x, u) – state and input dimension
                                • :(x, u, w) – state, input and noise dimensions

                              Output

                              • The scalar x if expr specifies the state dimension.
                              • The vector [x, u] if expr specifies state and input dimension.
                              • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                              source
                              extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                              Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                              For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                              • (:A_user, :A)
                              • (:B_user, :B)
                              • (:c_user, :c)
                              • (:D_user, :D)
                              • (:f_user, :f)
                              • (:statedim_user :statedim)
                              • (:inputdim_user :inputdim)
                              • (:noisedim_user :noisedim)

                              and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                              Input

                              • equation – dynamic equation
                              • state – state variable
                              • input – input variable
                              • noise – noise variable
                              • dim – dimensionality
                              • AT – abstract system type

                              Output

                              Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                              source
                              add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                              Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                              Input

                              • summand – expressions
                              • state – state variable
                              • input – input variable
                              • noise – noise variable

                              Output

                              Multiplication expression or symbol.

                              Example

                              julia> using MathematicalSystems: add_asterisk
                              +
                              +julia> add_asterisk(:(A1*x), :x, :u, :w)
                              +:(A1 * x)
                              +
                              +julia> add_asterisk(:(c1), :x, :u, :w)
                              +:c1
                              +
                              +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                              +:(A * x1)
                              +
                              +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                              +:(A * wb)
                              +
                              +julia> add_asterisk(:(A1u), :x, :u, :w)
                              +:(A1 * u)
                              +
                              +julia> add_asterisk(:(A1ub), :x, :u, :w)
                              +:A1ub
                              source
                              Base.sortFunction.
                              sort(parameters::Vector, order::Tuple)

                              Filter and sort the vector parameters according to order.

                              Input

                              • parameters – vector of tuples
                              • order – tuple of symbols

                              Output

                              A new vector of tuples corresponding to parameters filtered and sorted according to order.

                              Examples

                              julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                              +
                              +julia> sort(parameters, (:X, :U, :W))
                              +3-element Array{Tuple{Any,Symbol},1}:
                              + (:X1, :X)
                              + (:U1, :U)
                              + (:W1, :W)
                              +
                              +julia>  parameters = [(:const, :c), (:A, :A)];
                              +
                              +julia> sort(parameters, (:A, :B, :c, :D))
                              +2-element Array{Tuple{Any,Symbol},1}:
                              + (:A, :A)
                              + (:const, :c)

                              Notes

                              parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                              If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                              source

                              Querying expressions

                              is_equation(expr)

                              Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                              Input

                              • expr – expression

                              Output

                              A Bool indicating whether expr is an equation or not.

                              source
                              extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                              Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                              Input

                              • summands – array of expressions
                              • state – state variable
                              • input – input variable
                              • noise – noise variable

                              Output

                              Array of tuples of symbols with variable name and field name.

                              Example

                              julia> using MathematicalSystems: extract_sum
                              +
                              +julia> extract_sum([:(A1*x)], :x, :u, :w)
                              +1-element Array{Tuple{Any,Symbol},1}:
                              + (:(hcat(A1)), :A)
                              +
                              +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                              +3-element Array{Tuple{Any,Symbol},1}:
                              + (:(hcat(A1)), :A)
                              + (:(hcat(B1)), :B)
                              + (:(vcat(c)), :c)
                              +
                              +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                              +3-element Array{Tuple{Any,Symbol},1}:
                              + (:(hcat(A1)), :A)
                              + (:(hcat(B1)), :B)
                              + (:(hcat(B2)), :D)

                              Notes

                              If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                              If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                              Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                              source

                              Evaluation of AbstractSystem at given state

                              _instantiate(system::AbstractSystem, x::AbstractVector;
                              +            [check_constraints]=true)

                              Return the result of instantiating an AbstractSystem at the current state.

                              Input

                              • systemAbstractSystem
                              • x – state (it should be any vector type)
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The result of applying the system to state x.

                              Notes

                              The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                              source
                              _instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;
                              +            [check_constraints]=true)

                              Return the result of instantiating an AbstractSystem at the current state and applying one input.

                              Input

                              • systemAbstractSystem
                              • x – state (it should be any vector type)
                              • u – input (it should be any vector type) or noise, if system is not controlled
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The result of applying the system to state x and input u.

                              Notes

                              If the system is not controlled but noisy, the input u is interpreted as noise.

                              The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                              source
                              _instantiate(system::AbstractSystem,
                              +            x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                              Return the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.

                              Input

                              • systemAbstractSystem
                              • x – state (it should be any vector type)
                              • u – input (it should be any vector type)
                              • w – noise (it should be any vector type)
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The result of applying the system to state x, input u and noise w.

                              Notes

                              The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                              source

                              Naming convention for systems' fields

                              Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                              FieldDescriptionGetter function
                              Astate matrixstate_matrix
                              Binput matrixinput_matrix
                              caffine termaffine_term
                              Dnoise matrixnoise_matrix
                              Xstate constraintsstateset
                              Uinput constraintsinputset
                              Wdisturbance setnoiseset
                              diff --git a/v0.11.7/lib/methods/index.html b/v0.11.7/lib/methods/index.html new file mode 100644 index 00000000..3231ccd4 --- /dev/null +++ b/v0.11.7/lib/methods/index.html @@ -0,0 +1,17 @@ + +Methods · MathematicalSystems.jl

                              Methods

                              Methods

                              This section describes systems methods implemented in MathematicalSystems.jl.

                              States

                              statedim(s::AbstractSystem)

                              Returns the dimension of the state space of system s.

                              source
                              stateset(s::AbstractSystem)

                              Returns the set of allowed states of system s.

                              source

                              Inputs

                              inputdim(s::AbstractSystem)

                              Returns the dimension of the input space of system s.

                              source
                              inputset(s::AbstractSystem)

                              Returns the set of allowed inputs of system s.

                              source
                              nextinput(input::ConstantInput, n::Int=1)

                              Returns the first n elements of this input.

                              Input

                              • input – a constant input
                              • n – (optional, default: 1) the number of desired elements

                              Output

                              A repeated iterator that generates n equal samples of this input.

                              source
                              nextinput(input::VaryingInput, n::Int=1)

                              Returns the first n elements of this input.

                              Input

                              • input – varying input
                              • n – (optional, default: 1) number of desired elements

                              Output

                              An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                              source

                              Noises

                              noisedim(s::AbstractSystem)

                              Returns the dimension of the noise space of system s.

                              source
                              noiseset(s::AbstractSystem)

                              Returns the set of allowed noises of system s.

                              source

                              Output

                              outputdim(m::AbstractMap)

                              Returns the dimension of the output space of the map m.

                              source
                              outputmap(s::SystemWithOutput)

                              Returns the output map of a system with output.

                              source

                              Traits

                              islinear(s::AbstractSystem)

                              Specifies if the dynamics of system s is specified by linear equations.

                              Notes

                              We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                              The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                              [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                              source
                              islinear(m::AbstractMap)

                              Specifies if the map m is linear or not.

                              Notes

                              A map is linear if it preserves the operations of scalar multiplication and vector addition.

                              source
                              isaffine(s::AbstractSystem)

                              Specifies if the dynamics of system s is specified by affine equations.

                              Notes

                              An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                              The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                              source
                              ispolynomial(s::AbstractSystem)

                              Specifies if the dynamics of system s is specified by polynomial equations.

                              The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                              source
                              isaffine(m::AbstractMap)

                              Specifies if the map m is affine or not.

                              Notes

                              An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                              source
                              isblackbox(s::AbstractSystem)

                              Specifies if no specific structure is assumed for the dynamics of system s.

                              The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                              source
                              isnoisy(s::AbstractSystem)

                              Determines if the dynamics of system s contains a noise term w.

                              The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                              source
                              iscontrolled(s::AbstractSystem)

                              Determines if the dynamics of system s contains a control input u.

                              The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                              source
                              isconstrained(s::AbstractSystem)

                              Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                              The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                              source
                              state_matrix(s::AbstractSystem)

                              Return the state matrix of an affine system.

                              Notes

                              The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                              source
                              input_matrix(s::AbstractSystem)

                              Return the input matrix of a system with linear input.

                              Notes

                              The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                              source
                              noise_matrix(s::AbstractSystem)

                              Return the noise matrix of a system with linear noise.

                              Notes

                              The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                              source
                              affine_term(s::AbstractSystem)

                              Return the affine term in an affine system.

                              Notes

                              The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                              source

                              Maps

                              apply(m::AbstractMap, args...)

                              Apply the rule specified by the map to the given arguments.

                              source

                              Successor

                              successor(system::DiscreteIdentitySystem, x::AbstractVector)

                              Return the successor state of a DiscreteIdentitySystem.

                              Input

                              • systemDiscreteIdentitySystem
                              • x – state (it should be any vector type)

                              Output

                              The same state x.

                              source
                              successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                              +          [check_constraints]=true)

                              Return the successor state of a ConstrainedDiscreteIdentitySystem.

                              Input

                              • systemConstrainedDiscreteIdentitySystem
                              • x – state (it should be any vector type)
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The same state x.

                              source
                              successor(system::AbstractDiscreteSystem, x::AbstractVector;
                              +          [check_constraints]=true)

                              Return the successor state of an AbstractDiscreteSystem.

                              Input

                              • systemAbstractDiscreteSystem
                              • x – state (it should be any vector type)
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The result of applying the system to state x.

                              source
                              successor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;
                              +          [check_constraints]=true)

                              Return the successor state of an AbstractDiscreteSystem.

                              Input

                              • systemAbstractDiscreteSystem
                              • x – state (it should be any vector type)
                              • u – input (it should be any vector type) or noise, if system is not controlled
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The result of applying the system to state x and input u.

                              Notes

                              If the system is not controlled but noisy, the input u is interpreted as noise.

                              source
                              successor(system::AbstractDiscreteSystem,
                              +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                              Return the successor state of an AbstractDiscreteSystem.

                              Input

                              • systemAbstractDiscreteSystem
                              • x – state (it should be any vector type)
                              • u – input (it should be any vector type)
                              • w – noise (it should be any vector type)
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The result of applying the system to state x, input u and noise w.

                              source

                              Vector Field

                              vector_field(system::ContinuousIdentitySystem, x::AbstractVector)

                              Return the vector field state of a ContinuousIdentitySystem.

                              Input

                              • systemContinuousIdentitySystem
                              • x – state (it should be any vector type)

                              Output

                              A zeros vector of dimension statedim.

                              source
                              vector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;
                              +          [check_constraints]=true)

                              Return the vector field state of a ConstrainedContinuousIdentitySystem.

                              Input

                              • systemConstrainedContinuousIdentitySystem
                              • x – state (it should be any vector type)
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              A zeros vector of dimension statedim.

                              source
                              vector_field(system::AbstractContinuousSystem, x::AbstractVector;
                              +          [check_constraints]=true)

                              Return the vector field state of an AbstractContinuousSystem.

                              Input

                              • systemAbstractContinuousSystem
                              • x – state (it should be any vector type)
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The vector field of the system at state x.

                              source
                              vector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;
                              +          [check_constraints]=true)

                              Return the vector field state of an AbstractContinuousSystem.

                              Input

                              • systemAbstractContinuousSystem
                              • x – state (it should be any vector type)
                              • u – input (it should be any vector type) or noise, if system is not controlled
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The vector field of the system at state x and applying input u.

                              Notes

                              If the system is not controlled but noisy, the input u is interpreted as noise.

                              source
                              vector_field(system::AbstractContinuousSystem,
                              +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                              Return the vector field state of an AbstractContinuousSystem.

                              Input

                              • systemAbstractContinuousSystem
                              • x – state (it should be any vector type)
                              • u – input (it should be any vector type)
                              • w – noise (it should be any vector type)
                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                              Output

                              The vector field of the system at state x and applying input u and noise w.

                              source

                              Discretization

                              discretize(system::AbstractContinuousSystem, ΔT::Real,
                              +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                              +           constructor=_default_complementary_constructor(system))

                              Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                              Input

                              • system – an affine continuous system
                              • ΔT – sampling time
                              • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                              • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                              Output

                              Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                              source

                              Internal Methods

                              _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                              +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                              Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                              Input

                              • `` – discretization algorithm, used for dispatch
                              • ΔT – sampling time
                              • A – state matrix
                              • B – input matrix
                              • c – vector
                              • D – noise matrix

                              Output

                              Returns a vector containing the discretized input arguments A, B, c and D.

                              Notes

                              See discretize for more details.

                              source
                              _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                              Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                              Input

                              • A – state matrix
                              • ΔT – sampling time
                              • algorithm – (optional, default: :exact) discretization algorithm

                              Output

                              Returns a vector containing the discretized input argument A.

                              Notes

                              See discretize for more details.

                              source
                              _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                              +            A::AbstractMatrix, B::AbstractMatrix)

                              Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                              Input

                              • algorithm – discretization algorithm
                              • ΔT – sampling time
                              • A – state matrix
                              • B – input or noise matrix

                              Output

                              Returns a vector containing the discretized input arguments A and B.

                              Notes

                              This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                              See discretize for more details.

                              source
                              _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                              +            A::AbstractMatrix,c::AbstractVector)

                              Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                              Input

                              • algorithm – discretization algorithm
                              • ΔT – sampling time
                              • A – state matrix
                              • c – vector

                              Output

                              Returns a vector containing the discretized input arguments A and c.

                              Notes

                              See discretize for more details.

                              source
                              _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                              +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                              Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                              Input

                              • algorithm – discretization algorithm
                              • ΔT – sampling time
                              • A – state matrix
                              • B – input matrix
                              • c – vector

                              Output

                              Returns a vector containing the discretized input arguments A, B and c.

                              Notes

                              See discretize for more details.

                              source
                              _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                              +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                              Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                              Input

                              • algorithm – discretization algorithm
                              • ΔT – sampling time
                              • A – state matrix
                              • B – input matrix
                              • D – noise matrix

                              Output

                              Returns a vector containing the discretized input arguments A, B and D.

                              Notes

                              See discretize for more details.

                              source
                              typename(system::AbstractSystem)

                              Returns the base type of system without parameter information.

                              Input

                              • systemAbstractSystem

                              Output

                              The base type of system.

                              source
                              _complementary_type(system_type::Type{<:AbstractSystem})

                              Return the complementary type of a system type system_type.

                              Input

                              • system_type – type of AbstractSystem

                              Ouput

                              Return complementary type of system_type.

                              Notes

                              There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                              To get the complementary type of system type, use _complementary_type(typename(system)).

                              source
                              diff --git a/v0.11.7/lib/types/index.html b/v0.11.7/lib/types/index.html new file mode 100644 index 00000000..a5edc776 --- /dev/null +++ b/v0.11.7/lib/types/index.html @@ -0,0 +1,127 @@ + +Types · MathematicalSystems.jl

                              Types

                              Types

                              This section describes systems types implemented in MathematicalSystems.jl.

                              Abstract Systems

                              AbstractSystem

                              Abstract supertype for all system types.

                              source
                              AbstractContinuousSystem

                              Abstract supertype for all continuous system types.

                              source
                              AbstractDiscreteSystem

                              Abstract supertype for all discrete system types.

                              source

                              Continuous Systems

                              ContinuousIdentitySystem <: AbstractContinuousSystem

                              Trivial identity continuous-time system of the form:

                              \[ x(t)' = 0 \; \forall t.\]

                              Fields

                              • statedim – number of state variables
                              source
                              ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                              Trivial identity continuous-time system with domain constraints of the form:

                              \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                              Fields

                              • statedim – number of state variables
                              • X – state constraints
                              source
                              LinearContinuousSystem

                              Continuous-time linear system of the form:

                              \[ x(t)' = A x(t) \; \forall t.\]

                              Fields

                              • A – state matrix
                              source
                              AffineContinuousSystem

                              Continuous-time affine system of the form:

                              \[ x(t)' = A x(t) + c \; \forall t.\]

                              Fields

                              • A – state matrix
                              • c – affine term
                              source
                              LinearControlContinuousSystem

                              Continuous-time linear control system of the form:

                              \[ x(t)' = A x(t) + B u(t) \; \forall t.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              source
                              ConstrainedLinearContinuousSystem

                              Continuous-time linear system with domain constraints of the form:

                              \[ x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                              Fields

                              • A – state matrix
                              • X – state constraints
                              source
                              ConstrainedAffineContinuousSystem

                              Continuous-time affine system with domain constraints of the form:

                              \[ x(t)' = A x(t) + c, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                              Fields

                              • A – state matrix
                              • c – affine term
                              • X – state constraints
                              source
                              ConstrainedAffineControlContinuousSystem

                              Continuous-time affine control system with domain constraints of the form:

                              \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • c – affine term
                              • X – state constraints
                              • U – input constraints
                              source
                              ConstrainedLinearControlContinuousSystem

                              Continuous-time linear control system with domain constraints of the form:

                              \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • X – state constraints
                              • U – input constraints
                              source
                              LinearAlgebraicContinuousSystem

                              Continuous-time linear algebraic system of the form:

                              \[ E x(t)' = A x(t) \; \forall t.\]

                              Fields

                              • A – state matrix
                              • E – matrix, same size as A
                              source
                              ConstrainedLinearAlgebraicContinuousSystem

                              Continuous-time linear system with domain constraints of the form:

                              \[ E x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                              Fields

                              • A – state matrix
                              • E – matrix, same size as A
                              • X – state constraints
                              source
                              PolynomialContinuousSystem

                              Continuous-time polynomial system of the form:

                              \[ x(t)' = p(x(t)) \; \forall t.\]

                              Fields

                              • p – polynomial vector field
                              • statedim – number of state variables
                              source
                              ConstrainedPolynomialContinuousSystem

                              Continuous-time polynomial system with domain constraints:

                              \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                              Fields

                              • p – polynomial vector field
                              • X – constraint set
                              • statedim – number of state variables
                              source
                              BlackBoxContinuousSystem <: AbstractContinuousSystem

                              Continuous-time system defined by a right-hand side of the form:

                              \[ x(t)' = f(x(t)) \; \forall t.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              source
                              ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                              Continuous-time system defined by a right-hand side with domain constraints of the form:

                              \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • X – state constraints
                              source
                              BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                              Continuous-time control system defined by a right-hand side of the form:

                              \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • inputdim – number of input variables
                              source
                              ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                              Continuous-time control system defined by a right-hand side with domain constraints of the form:

                              \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • inputdim – number of input variables
                              • X – state constraints
                              • U – input constraints
                              source
                              NoisyLinearContinuousSystem

                              Continuous-time linear system with additive disturbance of the form:

                              \[ x(t)' = A x(t) + D w(t) \; \forall t.\]

                              Fields

                              • A – state matrix
                              • D – noise matrix
                              source
                              NoisyConstrainedLinearContinuousSystem

                              Continuous-time linear system with additive disturbance and domain constraints of the form:

                              \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                              Fields

                              • A – state matrix
                              • D – noise matrix
                              • X – state constraints
                              • W – disturbance set
                              source
                              NoisyLinearControlContinuousSystem

                              Continuous-time linear control system with additive disturbance of the form:

                              \[ x(t)' = A x(t) + B u(t) + D w(t) \; \forall t.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • D – noise matrix
                              source
                              NoisyConstrainedLinearControlContinuousSystem

                              Continuous-time linear control system with additive disturbance and domain constraints of the form:

                              \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • D – noise matrix
                              • X – state constraints
                              • U – input constraints
                              • W – disturbance set
                              source
                              NoisyAffineControlContinuousSystem

                              Continuous-time affine control system with additive disturbance of the form:

                              \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • c – affine term
                              • D – noise matrix
                              source
                              NoisyConstrainedAffineControlContinuousSystem

                              Continuous-time affine control system with additive disturbance and domain constraints of the form:

                              \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • c – affine term
                              • D – noise matrix
                              • X – state constraints
                              • U – input constraints
                              • W – disturbance set
                              source
                              NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                              Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                              \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • inputdim – number of input variables
                              • noisedim – number of noise variables
                              source
                              NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                              Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                              \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • inputdim – number of input variables
                              • noisedim – number of noise variables
                              • X – state constraints
                              • U – input constraints
                              • W – disturbance set
                              source
                              SecondOrderLinearContinuousSystem

                              Continuous-time second order linear system of the form:

                              \[ Mx''(t) + Cx'(t) + Kx(t) = 0\; \forall t.\]

                              Fields

                              • M – mass matrix
                              • C – viscosity matrix
                              • K – stiffness matrix
                              source
                              SecondOrderAffineContinuousSystem

                              Continuous-time second order affine system of the form:

                              \[ Mx''(t) + Cx'(t) + Kx(t) = b\; \forall t.\]

                              Fields

                              • M – mass matrix
                              • C – viscosity matrix
                              • K – stiffness matrix
                              • b – affine term
                              source
                              SecondOrderConstrainedAffineControlContinuousSystem

                              Continuous-time second order constrained affine control system of the form:

                              \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t) + d, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                              Fields

                              • M – mass matrix
                              • C – viscosity matrix
                              • K – stiffness matrix
                              • B – input matrix
                              • d – affine term
                              • X – state constraints
                              • U – input constraints
                              source
                              SecondOrderConstrainedLinearControlContinuousSystem

                              Continuous-time second order constrained linear control system of the form:

                              \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                              Fields

                              • M – mass matrix
                              • C – viscosity matrix
                              • K – stiffness matrix
                              • B – input matrix
                              • X – state constraints
                              • U – input constraints
                              source

                              Discrete Systems

                              DiscreteIdentitySystem <: AbstractDiscreteSystem

                              Trivial identity discrete-time system of the form:

                              \[ x_{k+1} = x_k \; \forall k.\]

                              Fields

                              • statedim – number of state variables
                              source
                              ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                              Trivial identity discrete-time system with domain constraints of the form:

                              \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                              Fields

                              • statedim – number of state variables
                              • X – state constraints
                              source
                              LinearDiscreteSystem

                              Discrete-time linear system of the form:

                              \[ x_{k+1} = A x_k \; \forall k.\]

                              Fields

                              • A – state matrix
                              source
                              AffineDiscreteSystem

                              Discrete-time affine system of the form:

                              \[ x_{k+1} = A x_k + c \; \forall k.\]

                              Fields

                              • A – state matrix
                              • c – affine term
                              source
                              LinearControlDiscreteSystem

                              Discrete-time linear control system of the form:

                              \[ x_{k+1} = A x_k + B u_k \; \forall k.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              source
                              ConstrainedLinearDiscreteSystem

                              Discrete-time linear system with domain constraints of the form:

                              \[ x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                              Fields

                              • A – state matrix
                              • X – state constraints
                              source
                              ConstrainedAffineDiscreteSystem

                              Discrete-time affine system with domain constraints of the form:

                              \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                              Fields

                              • A – state matrix
                              • c – affine term
                              • X – state constraints
                              source
                              ConstrainedLinearControlDiscreteSystem

                              Discrete-time linear control system with domain constraints of the form:

                              \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • X – state constraints
                              • U – input constraints
                              source
                              ConstrainedAffineControlDiscreteSystem

                              Continuous-time affine control system with domain constraints of the form:

                              \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • c – affine term
                              • X – state constraints
                              • U – input constraints
                              source
                              LinearAlgebraicDiscreteSystem

                              Discrete-time linear algebraic system of the form:

                              \[ E x_{k+1} = A x_k \; \forall k.\]

                              Fields

                              • A – state matrix
                              • E – matrix, same size as A
                              source
                              ConstrainedLinearAlgebraicDiscreteSystem

                              Discrete-time linear system with domain constraints of the form:

                              \[ E x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                              Fields

                              • A – state matrix
                              • E – matrix, same size as A
                              • X – state constraints
                              source
                              PolynomialDiscreteSystem

                              Discrete-time polynomial system of the form:

                              \[ x_{k+1} = p(x_k) \; \forall k.\]

                              Fields

                              • p – polynomial vector field
                              • statedim – number of state variables
                              source
                              ConstrainedPolynomialDiscreteSystem

                              Discrete-time polynomial system with domain constraints:

                              \[ x_{k+1} = p(x_k), \;  x_k ∈ \mathcal{X} \; \forall k.\]

                              Fields

                              • p – polynomial
                              • X – constraint set
                              • statedim – number of state variables
                              source
                              BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                              Discrete-time system defined by a right-hand side of the form:

                              \[ x_{k+1} = f(x_k) \; \forall k.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              source
                              ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                              Discrete-time system defined by a right-hand side with domain constraints of the form:

                              \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • X – state constraints
                              source
                              BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                              Discrete-time control system defined by a right-hand side of the form:

                              \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • inputdim – number of input variables
                              source
                              ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                              Discrete-time control system defined by a right-hand side with domain constraints of the form:

                              \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • inputdim – number of input variables
                              • X – state constraints
                              • U – input constraints
                              source
                              NoisyLinearDiscreteSystem

                              Discrete-time linear system with additive disturbance of the form:

                              \[ x_{k+1} = A x_k + D w_k \; \forall k.\]

                              Fields

                              • A – state matrix
                              • D – noise matrix
                              source
                              NoisyConstrainedLinearDiscreteSystem

                              Discrete-time linear system with additive disturbance and domain constraints of the form:

                              \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                              Fields

                              • A – state matrix
                              • D – noise matrix
                              • X – state constraints
                              • W – disturbance set
                              source
                              NoisyLinearControlDiscreteSystem

                              Continuous-time linear control system with additive disturbance of the form:

                              \[ x_{k+1} = A x_k + B u_k + D w_k \; \forall k.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • D – noise matrix
                              source
                              NoisyConstrainedLinearControlDiscreteSystem

                              Continuous-time linear control system with additive disturbance and domain constraints of the form:

                              \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • D – noise matrix
                              • X – state constraints
                              • U – input constraints
                              • W – disturbance set
                              source
                              NoisyAffineControlDiscreteSystem

                              Continuous-time affine control system with additive disturbance of the form:

                              \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • c – affine term
                              • D – noise matrix
                              source
                              NoisyConstrainedAffineControlDiscreteSystem

                              Continuous-time affine control system with additive disturbance and domain constraints of the form:

                              \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                              Fields

                              • A – state matrix
                              • B – input matrix
                              • c – affine term
                              • D – noise matrix
                              • X – state constraints
                              • U – input constraints
                              • W – disturbance set
                              source
                              NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                              Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                              \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • inputdim – number of input variables
                              • noisedim – number of noise variables
                              source
                              NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                              Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                              \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                              Fields

                              • f – function that holds the right-hand side
                              • statedim – number of state variables
                              • inputdim – number of input variables
                              • noisedim – number of noise variables
                              • X – state constraints
                              • U – input constraints
                              • W – disturbance set
                              source
                              SecondOrderLinearDiscreteSystem

                              Discrete-time second order linear system of the form:

                              \[ Mx_{k+2} + Cx_{k+1} + Kx_k = 0\; \forall k.\]

                              Fields

                              • M – mass matrix
                              • C – viscosity matrix
                              • K – stiffness matrix
                              source
                              SecondOrderAffineDiscreteSystem

                              Discrete-time second order affine system of the form:

                              \[ Mx_{k+2} + Cx_{k+1} + Kx_k = b\; \forall k.\]

                              Fields

                              • M – mass matrix
                              • C – viscosity matrix
                              • K – stiffness matrix
                              • b – affine term
                              source
                              SecondOrderConstrainedAffineControlDiscreteSystem

                              Discrete-time second order constrained affine control system of the form:

                              \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k + d, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                              Fields

                              • M – mass matrix
                              • C – viscosity matrix
                              • K – stiffness matrix
                              • B – input matrix
                              • d – affine term
                              • X – state constraints
                              • U – input constraints
                              source
                              SecondOrderConstrainedLinearControlDiscreteSystem

                              Discrete-time second order constrained linear control system of the form:

                              \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                              Fields

                              • M – mass matrix
                              • C – viscosity matrix
                              • K – stiffness matrix
                              • B – input matrix
                              • X – state constraints
                              • U – input constraints
                              source

                              Discretization Algorithms

                              AbstractDiscretizationAlgorithm

                              Abstract supertype for all discretization algorithms.

                              Note

                              For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                              _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                              +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                              are required.

                              source
                              ExactDiscretization <: AbstractDiscretizationAlgorithm

                              Exact discretization algorithm for affine systems.

                              Algorithm

                              This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                              Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                              The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                              The algorithm described above is a well known result from the literature [1].

                              [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                              source
                              EulerDiscretization <: AbstractDiscretizationAlgorithm

                              Euler discretization algorithm for affine systems.

                              Algorithm

                              This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                              Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                              The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                              The algorithm described above is a well known result from the literature [1].

                              [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                              source

                              System macro

                              system(expr...)

                              Return an instance of the system type corresponding to the given expressions.

                              Input

                              • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                              Output

                              A system that best matches the given expressions.

                              Notes

                              Terms. The expression expr contains one or more of the following sub-expressions:

                              • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                              • set constraints, e.g. x ∈ X
                              • input constraints, e.g. u ∈ U
                              • dimensionality, e.g. dim: (2,1) or dim = 1
                              • specification of the input variable, e.g. input: u or input = u
                              • specification of the noise variable, e,g, noise: w or noise = w

                              The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                              @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                              The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                              Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                              Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                              Exceptions. The following exceptions and particular cases apply:

                              • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                              • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                              • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                              Examples

                              Let us first create a continuous linear system using this macro:

                              julia> A = [1. 0; 0 1.];
                              +
                              +julia> @system(x' = A*x)
                              +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                              A discrete system is defined by using :

                              julia> @system(x⁺ = A*x)
                              +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                              Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                              julia> using LazySets
                              +
                              +julia> B = Matrix([1. 0.5]');
                              +
                              +julia> c = [1., 1.5];
                              +
                              +julia> X = BallInf(zeros(2), 10.);
                              +
                              +julia> U = BallInf(zeros(1), 2.);
                              +
                              +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                              +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                              For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                              julia> f(x, u) = x + u;
                              +
                              +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                              +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                              source

                              Initial-value problem macro

                              ivp(expr...)

                              Return an instance of the initial-value problem type corresponding to the given expressions.

                              Input

                              • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                              Output

                              An initial-value problem that best matches the given expressions.

                              Notes

                              This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                              The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

                              Examples

                              julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                              +
                              +julia> typeof(p)
                              +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                              +
                              +julia> initial_state(p)
                              +1-element Array{Float64,1}:
                              + 1.0
                              +
                              +julia> sys = @system(x' = [1 0; 0 1] * x);
                              +
                              +julia> @ivp(sys, x(0) ∈ [-1, 1])
                              +InitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])
                              source

                              Identity operator

                              IdentityMultiple{T} < AbstractMatrix{T} where T

                              A scalar multiple of the identity matrix of given order and numeric type.

                              Fields

                              • M – uniform scaling operator of type T
                              • n – size of the identity matrix

                              Notes

                              This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                              Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                              The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                              Examples

                              The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                              julia> using MathematicalSystems: IdentityMultiple
                              +
                              +julia> I2 = I(2)
                              +IdentityMultiple{Float64} of value 1.0 and order 2
                              +
                              +julia> I2 + I2
                              +IdentityMultiple{Float64} of value 2.0 and order 2
                              +
                              +julia> 4*I2
                              +IdentityMultiple{Float64} of value 4.0 and order 2

                              The numeric type (default Float64) can be passed as a second argument:

                              julia> I2r = I(2, Rational{Int})
                              +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                              +
                              +julia> I2r + I2r
                              +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                              +
                              +julia> 4*I2r
                              +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                              To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                              julia> I2 = I(2.0, 2)
                              +IdentityMultiple{Float64} of value 2.0 and order 2
                              +
                              +julia> I2r = I(2//1, 2)
                              +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                              Or use the constructor passing the UniformScaling (I):

                              julia> I2 = IdentityMultiple(2.0*I, 2)
                              +IdentityMultiple{Float64} of value 2.0 and order 2
                              +
                              +julia> I2r = IdentityMultiple(2//1*I, 2)
                              +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                              source

                              Initial Value Problems

                              InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                              Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                              Fields

                              • s – system
                              • x0 – initial state

                              Examples

                              The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                              julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                              +
                              +julia> x₀ = [-1/2, 1/2];
                              +
                              +julia> p = InitialValueProblem(s, x₀);
                              +
                              +julia> initial_state(p) # same as p.x0
                              +2-element Array{Float64,1}:
                              + -0.5
                              +  0.5
                              +
                              +julia> statedim(p)
                              +2
                              +
                              +julia> inputdim(p)
                              +0
                              source
                              IVP

                              IVP is an alias for InitialValueProblem.

                              source
                              initial_state(ivp::InitialValueProblem)

                              Return the initial state of an initial-value problem.

                              Input

                              • ivp – initial-value problem

                              Output

                              The initial state of an initial-value problem.

                              source
                              system(ivp::InitialValueProblem)

                              Return the system wrapped by an initial-value problem.

                              Input

                              • ivp – initial-value problem

                              Output

                              The system of the given initial-value problem.

                              source

                              Input Types

                              AbstractInput

                              Abstract supertype for all input types.

                              Notes

                              The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                              Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                              A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                              source
                              ConstantInput{UT} <: AbstractInput

                              Type representing an input that remains constant in time.

                              Fields

                              • U – input set

                              Examples

                              The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                              julia> c = ConstantInput(-1//2)
                              +ConstantInput{Rational{Int64}}(-1//2)
                              +
                              +julia> iterate(c, 1)
                              +(-1//2, nothing)
                              +
                              +julia> iterate(c, 2)
                              +(-1//2, nothing)
                              +
                              +julia> collect(nextinput(c, 4))
                              +4-element Array{Rational{Int64},1}:
                              + -1//2
                              + -1//2
                              + -1//2
                              + -1//2

                              The elements of this input are rational numbers:

                              julia> eltype(c)
                              +Rational{Int64}

                              To transform a constant input, you can use map as in:

                              julia> map(x->2*x, c)
                              +ConstantInput{Rational{Int64}}(-1//1)
                              source
                              VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                              Type representing an input that may vary with time.

                              Fields

                              • U – vector of input sets

                              Examples

                              The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                              julia> v = VaryingInput([-1//2, 1//2])
                              +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                              +
                              +julia> length(v)
                              +2
                              +
                              +julia> eltype(v)
                              +Rational{Int64}

                              Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                              julia> iterate(v, 1)
                              +(-1//2, 2)
                              +
                              +julia> iterate(v, 2)
                              +(1//2, 3)

                              The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                              julia> typeof(nextinput(v))
                              +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                              +
                              +julia> collect(nextinput(v, 1))
                              +1-element Array{Rational{Int64},1}:
                              + -1//2
                              +
                              +julia> collect(nextinput(v, 2))
                              +2-element Array{Rational{Int64},1}:
                              + -1//2
                              +  1//2

                              You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                              julia> collect(v)
                              +2-element Array{Rational{Int64},1}:
                              + -1//2
                              +  1//2
                              +
                              +julia> [2*vi for vi in v]
                              +2-element Array{Rational{Int64},1}:
                              + -1//1
                              +  1//1

                              Since this input type is finite, querying more elements than its length returns the full vector:

                              julia> collect(nextinput(v, 4))
                              +2-element Array{Rational{Int64},1}:
                              + -1//2
                              +  1//2

                              To transform a varying input, you can use map as in:

                              julia> map(x->2*x, v)
                              +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                              source

                              Maps

                              AbstractMap

                              Abstract supertype for all map types.

                              source
                              IdentityMap

                              An identity map,

                              \[ x ↦ x.\]

                              Fields

                              • dim – dimension
                              source
                              ConstrainedIdentityMap

                              An identity map with state constraints of the form:

                              \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                              Fields

                              • dim – dimension
                              • X – state constraints
                              source
                              LinearMap

                              A linear map,

                              \[ x ↦ Ax\]

                              Fields

                              • A – matrix
                              source
                              ConstrainedLinearMap

                              A linear map with state constraints of the form:

                              \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                              Fields

                              • A – matrix
                              • X – state constraints
                              source
                              AffineMap

                              An affine map,

                              \[ x ↦ Ax + c.\]

                              Fields

                              • A – matrix
                              • c – vector
                              source
                              ConstrainedAffineMap

                              An affine map with state constraints of the form:

                              \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                              Fields

                              • A – matrix
                              • c – vector
                              • X – state constraints
                              source
                              LinearControlMap

                              A linear control map,

                              \[ (x, u) ↦ Ax + Bu.\]

                              Fields

                              • A – matrix
                              • B – matrix
                              source
                              ConstrainedLinearControlMap

                              A linear control map with state and input constraints,

                              \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                              Fields

                              • A – matrix
                              • B – matrix
                              • X – state constraints
                              • U – input constraints
                              source
                              AffineControlMap

                              An affine control map,

                              \[ (x, u) ↦ Ax + Bu + c.\]

                              Fields

                              • A – matrix
                              • B – matrix
                              • c – vector
                              source
                              ConstrainedAffineControlMap

                              An affine control map with state and input constraints,

                              \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                              Fields

                              • A – matrix
                              • B – matrix
                              • c – vector
                              • X – state constraints
                              • U – input constraints
                              source
                              ResetMap

                              A reset map,

                              \[ x ↦ R(x),\]

                              such that a subset of the variables is given a specified value, and the rest are unchanged.

                              Fields

                              • dim – dimension
                              • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                              source
                              ConstrainedResetMap

                              A reset map with state constraints of the form:

                              \[ x ↦ R(x), x ∈ \mathcal{X},\]

                              such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                              Fields

                              • dim – dimension
                              • X – state constraints
                              • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                              source

                              Macros

                              map(ex, args)

                              Return an instance of the map type corresponding to the given expression.

                              Input

                              • ex – an expression defining the map, in the form of an anonymous function
                              • args – additional optional arguments

                              Output

                              A map that best matches the given expression.

                              Examples

                              Let us first create a linear map using this macro:

                              julia> @map x -> [1 0; 0 0]*x
                              +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                              We can create an affine system as well:

                              julia> @map x -> [1 0; 0 0]*x + [2, 0]
                              +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                              Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                              julia> @map(x -> x, dim=5)
                              +IdentityMap(5)

                              A state constraint on such map can be specified passing the additional argument x ∈ X.

                              An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                              julia> @map x -> I(5)*x
                              +IdentityMap(5)
                              source

                              Systems with output

                              SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem

                              Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                              Fields

                              • s – system of type ST
                              • outputmap – output map of type MT
                              source
                              LinearTimeInvariantSystem(A, B, C, D)

                              A linear time-invariant system with of the form

                              \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                              Input

                              • A – matrix
                              • B – matrix
                              • C – matrix
                              • D – matrix

                              Output

                              A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                              source
                              LinearTimeInvariantSystem(A, B, C, D, X, U)

                              A linear time-invariant system with state and input constraints of the form

                              \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                              where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                              Input

                              • A – matrix
                              • B – matrix
                              • C – matrix
                              • D – matrix
                              • X – state constraints
                              • U – input constraints

                              Output

                              A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                              source
                              LTISystem

                              LTISystem is an alias for LinearTimeInvariantSystem.

                              source

                              Vector Field

                              VectorField{T<:Function}

                              Type that computes the vector field of an AbstractContinuousSystem.

                              Fields

                              • field – function for calculating the vector field
                              source
                              diff --git a/v0.11.7/search/index.html b/v0.11.7/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.7/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                              Search

                              Search

                              Number of results: loading...

                                diff --git a/v0.11.7/search_index.js b/v0.11.7/search_index.js new file mode 100644 index 00000000..6e609207 --- /dev/null +++ b/v0.11.7/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Evaluation-of-AbstractSystem-at-given-state-1","page":"Internals","title":"Evaluation of AbstractSystem at given state","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_instantiate","category":"page"},{"location":"lib/internals/#MathematicalSystems._instantiate","page":"Internals","title":"MathematicalSystems._instantiate","text":"_instantiate(system::AbstractSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying one input.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem\nSecondOrderLinearContinuousSystem\nSecondOrderAffineContinuousSystem\nSecondOrderConstrainedAffineControlContinuousSystem\nSecondOrderConstrainedLinearControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearContinuousSystem","text":"SecondOrderLinearContinuousSystem\n\nContinuous-time second order linear system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = 0 forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineContinuousSystem","text":"SecondOrderAffineContinuousSystem\n\nContinuous-time second order affine system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = b forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","text":"SecondOrderConstrainedAffineControlContinuousSystem\n\nContinuous-time second order constrained affine control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t) + d  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","text":"SecondOrderConstrainedLinearControlContinuousSystem\n\nContinuous-time second order constrained linear control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem\nSecondOrderLinearDiscreteSystem\nSecondOrderAffineDiscreteSystem\nSecondOrderConstrainedAffineControlDiscreteSystem\nSecondOrderConstrainedLinearControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearDiscreteSystem","text":"SecondOrderLinearDiscreteSystem\n\nDiscrete-time second order linear system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = 0 forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineDiscreteSystem","text":"SecondOrderAffineDiscreteSystem\n\nDiscrete-time second order affine system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = b forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","text":"SecondOrderConstrainedAffineControlDiscreteSystem\n\nDiscrete-time second order constrained affine control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k + d  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","text":"SecondOrderConstrainedLinearControlDiscreteSystem\n\nDiscrete-time second order constrained linear control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro-1","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nA state constraint on such map can be specified passing the additional argument x ∈ X.\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Vector-Field-1","page":"Types","title":"Vector Field","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"VectorField","category":"page"},{"location":"lib/types/#MathematicalSystems.VectorField","page":"Types","title":"MathematicalSystems.VectorField","text":"VectorField{T<:Function}\n\nType that computes the vector field of an AbstractContinuousSystem.\n\nFields\n\nfield – function for calculating the vector field\n\n\n\n\n\n","category":"type"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Noises-1","page":"Methods","title":"Noises","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"noisedim\nnoiseset","category":"page"},{"location":"lib/methods/#MathematicalSystems.noisedim","page":"Methods","title":"MathematicalSystems.noisedim","text":"noisedim(s::AbstractSystem)\n\nReturns the dimension of the noise space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.noiseset","page":"Methods","title":"MathematicalSystems.noiseset","text":"noiseset(s::AbstractSystem)\n\nReturns the set of allowed noises of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisblackbox(::AbstractSystem)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isblackbox-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isblackbox","text":"isblackbox(s::AbstractSystem)\n\nSpecifies if no specific structure is assumed for the dynamics of system s.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(s::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(s::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(s::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(s::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Vector-Field-1","page":"Methods","title":"Vector Field","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"vector_field","category":"page"},{"location":"lib/methods/#MathematicalSystems.vector_field","page":"Methods","title":"MathematicalSystems.vector_field","text":"vector_field(system::ContinuousIdentitySystem, x::AbstractVector)\n\nReturn the vector field state of a ContinuousIdentitySystem.\n\nInput\n\nsystem – ContinuousIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of a ConstrainedContinuousIdentitySystem.\n\nInput\n\nsystem – ConstrainedContinuousIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s7} where #s7<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.7/siteinfo.js b/v0.11.7/siteinfo.js new file mode 100644 index 00000000..62742721 --- /dev/null +++ b/v0.11.7/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.7"; diff --git a/v0.11.8/about/index.html b/v0.11.8/about/index.html new file mode 100644 index 00000000..53f1576e --- /dev/null +++ b/v0.11.8/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                About

                                About

                                This page contains some general information about this project, and recommendations about contributing.

                                Contributing

                                If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                Branches and pull requests (PR)

                                We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                Unit testing and continuous integration (CI)

                                This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                $ julia --color=yes test/runtests.jl

                                Alternatively, you can achieve the same from inside the REPL using the following command:

                                julia> Pkg.test("MathematicalSystems")

                                We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                Contributing to the documentation

                                New functions and types should be documented according to our guidelines directly in the source code.

                                You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                julia> ?LinearContinuousSystem

                                This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                $ julia --color=yes docs/make.jl

                                Note that this also runs all doctests which will take some time.

                                Related projects

                                This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                Below we list more related projects.

                                Package nameDescription
                                HybridSystems.jlHybrid Systems definitions in Julia.
                                LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                ControlToolbox.jlAnalysis and design tools for control systems.
                                ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                ControlSystems.jlA Control Systems Toolbox for Julia
                                ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                Credits

                                These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                diff --git a/v0.11.8/assets/arrow.svg b/v0.11.8/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.11.8/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.11.8/assets/documenter.css b/v0.11.8/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.11.8/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                the is very first thing on the page (i.e. the second element + * in the
                                , * after the
                                , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                 surrounding the , while
                                + * highlight.js applies the .hljs style directly to the  tag.
                                + */
                                +.hljs {
                                +    background-color: transparent;
                                +    padding: 0;
                                +}
                                +
                                +@media only screen and (max-width: 768px) {
                                +    nav.toc {
                                +        position: fixed;
                                +        width: 16em;
                                +        left: -16em;
                                +        -webkit-overflow-scrolling: touch;
                                +        -webkit-transition-property: left; /* Safari */
                                +        -webkit-transition-duration: 0.3s; /* Safari */
                                +        transition-property: left;
                                +        transition-duration: 0.3s;
                                +        -webkit-transition-timing-function: ease-out; /* Safari */
                                +        transition-timing-function: ease-out;
                                +        z-index: 2;
                                +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                                +    }
                                +
                                +    nav.toc.show {
                                +        left: 0;
                                +    }
                                +
                                +    article {
                                +        margin-left: 0;
                                +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                +        overflow-wrap: break-word;
                                +    }
                                +
                                +    article > header {
                                +        position: fixed;
                                +        left: 0;
                                +        z-index: 1;
                                +    }
                                +
                                +    article > header nav, hr {
                                +        display: none;
                                +    }
                                +
                                +    article > header div#topbar {
                                +        display: block; /* is mobile */
                                +        position: fixed;
                                +        width: 100%;
                                +        height: 1.5em;
                                +        padding-top: 1em;
                                +        padding-bottom: 1em;
                                +        background-color: #fcfcfc;
                                +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                +        top: 0;
                                +        -webkit-transition-property: top; /* Safari */
                                +        -webkit-transition-duration: 0.3s; /* Safari */
                                +        transition-property: top;
                                +        transition-duration: 0.3s;
                                +    }
                                +
                                +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                +        top: -4em;
                                +        -webkit-transition-property: top; /* Safari */
                                +        -webkit-transition-duration: 0.7s; /* Safari */
                                +        transition-property: top;
                                +        transition-duration: 0.7s;
                                +    }
                                +
                                +    article > header div#topbar span {
                                +        width: 80%;
                                +        height: 1.5em;
                                +        margin-top: -0.1em;
                                +        margin-left: 0.9em;
                                +        font-size: 1.2em;
                                +        overflow: hidden;
                                +    }
                                +
                                +    article > header div#topbar a.fa-bars {
                                +        float: right;
                                +        padding: 0.6em;
                                +        margin-top: -0.6em;
                                +        margin-right: 0.3em;
                                +        font-size: 1.5em;
                                +    }
                                +
                                +    article > header div#topbar a.fa-bars:visited {
                                +        color: #3091d1;
                                +    }
                                +
                                +    article table {
                                +        overflow-x: auto;
                                +        display: block;
                                +    }
                                +
                                +    article div.MathJax_Display {
                                +        overflow: scroll;
                                +    }
                                +
                                +    article span.MathJax {
                                +        overflow: hidden;
                                +    }
                                +}
                                +
                                +@media only screen and (max-width: 320px) {
                                +    body {
                                +        font-size: 15px;
                                +    }
                                +}
                                diff --git a/v0.11.8/assets/documenter.js b/v0.11.8/assets/documenter.js
                                new file mode 100644
                                index 00000000..761ae294
                                --- /dev/null
                                +++ b/v0.11.8/assets/documenter.js
                                @@ -0,0 +1,132 @@
                                +/*
                                + * Part of Documenter.jl
                                + *     https://github.com/JuliaDocs/Documenter.jl
                                + *
                                + * License: MIT
                                + */
                                +
                                +requirejs.config({
                                +    paths: {
                                +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                +    },
                                +    shim: {
                                +        'mathjax' : {
                                +            exports: "MathJax"
                                +        },
                                +        'highlight-julia': ['highlight'],
                                +        'highlight-julia-repl': ['highlight'],
                                +    }
                                +});
                                +
                                +// Load MathJax
                                +require(['mathjax'], function(MathJax) {
                                +    MathJax.Hub.Config({
                                +      "tex2jax": {
                                +        inlineMath: [['$','$'], ['\\(','\\)']],
                                +        processEscapes: true
                                +      }
                                +    });
                                +    MathJax.Hub.Config({
                                +      config: ["MMLorHTML.js"],
                                +      jax: [
                                +        "input/TeX",
                                +        "output/HTML-CSS",
                                +        "output/NativeMML"
                                +      ],
                                +      extensions: [
                                +        "MathMenu.js",
                                +        "MathZoom.js",
                                +        "TeX/AMSmath.js",
                                +        "TeX/AMSsymbols.js",
                                +        "TeX/autobold.js",
                                +        "TeX/autoload-all.js"
                                +      ]
                                +    });
                                +    MathJax.Hub.Config({
                                +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                +    });
                                +})
                                +
                                +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                +    $(document).ready(function() {
                                +        hljs.initHighlighting();
                                +    })
                                +
                                +})
                                +
                                +// update the version selector with info from the siteinfo.js and ../versions.js files
                                +require(['jquery'], function($) {
                                +    $(document).ready(function() {
                                +        var version_selector = $("#version-selector");
                                +
                                +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                +            var option = $("");
                                +            version_selector.append(option);
                                +        }
                                +
                                +        if (typeof DOC_VERSIONS !== 'undefined') {
                                +            var existing_versions = $('#version-selector > option');
                                +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                +            DOC_VERSIONS.forEach(function(each) {
                                +                var version_url = documenterBaseURL + "/../" + each;
                                +                var existing_id = $.inArray(each, existing_versions_texts);
                                +                // if not already in the version selector, add it as a new option,
                                +                // otherwise update the old option with the URL and enable it
                                +                if (existing_id == -1) {
                                +                    var option = $("");
                                +                    version_selector.append(option);
                                +                } else {
                                +                    var option = existing_versions[existing_id];
                                +                    option.value = version_url;
                                +                    option.disabled = false;
                                +                }
                                +            });
                                +        }
                                +
                                +        // only show the version selector if the selector has been populated
                                +        if ($('#version-selector > option').length > 0) {
                                +            version_selector.css("visibility", "visible");
                                +        }
                                +
                                +        // Scroll the navigation bar to the currently selected menu item
                                +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                                +    })
                                +
                                +})
                                +
                                +// mobile
                                +require(['jquery', 'headroom'], function($, Headroom) {
                                +    $(document).ready(function() {
                                +        var navtoc = $("nav.toc");
                                +        $("nav.toc li.current a.toctext").click(function() {
                                +            navtoc.toggleClass('show');
                                +        });
                                +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                +            ev.preventDefault();
                                +            navtoc.toggleClass('show');
                                +            if (navtoc.hasClass('show')) {
                                +                var title = $("article > header div#topbar span").text();
                                +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                +            }
                                +        });
                                +        $("article#docs").bind('click', function(ev) {
                                +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                +                return;
                                +            }
                                +            if (navtoc.hasClass('show')) {
                                +                navtoc.removeClass('show');
                                +            }
                                +        });
                                +        if ($("article > header div#topbar").css('display') == 'block') {
                                +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                +            headroom.init();
                                +        }
                                +    })
                                +})
                                diff --git a/v0.11.8/assets/juliareach.css b/v0.11.8/assets/juliareach.css
                                new file mode 100644
                                index 00000000..64b0d92d
                                --- /dev/null
                                +++ b/v0.11.8/assets/juliareach.css
                                @@ -0,0 +1,583 @@
                                +/*
                                + * The default CSS style for Documenter.jl generated sites
                                + *
                                + * Heavily inspired by the Julia Sphinx theme
                                + *     https://github.com/JuliaLang/JuliaDoc
                                + * which extends the sphinx_rtd_theme
                                + *     https://github.com/snide/sphinx_rtd_theme
                                + *
                                + * Part of Documenter.jl
                                + *     https://github.com/JuliaDocs/Documenter.jl
                                + *
                                + * License: MIT
                                + */
                                +
                                +/* The original CSS is modified such that it right-justifies the text. */
                                +
                                +/* fonts */
                                +body, input {
                                +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                +  font-size: 16px;
                                +  color: #222;
                                +  text-rendering: optimizeLegibility;
                                +}
                                +
                                +pre, code, kbd {
                                +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                +  font-size: 0.90em;
                                +}
                                +
                                +pre code {
                                +  font-size: 1em;
                                +}
                                +
                                +a {
                                +    color: #2980b9;
                                +    text-decoration: none;
                                +}
                                +
                                +a:hover {
                                +    color: #3091d1;
                                +}
                                +
                                +a:visited {
                                +    color: #9b59b6;
                                +}
                                +
                                +body {
                                +    line-height: 1.5;
                                +}
                                +
                                +h1 {
                                +    font-size: 1.75em;
                                +}
                                +
                                +/* Unless the 

                                the is very first thing on the page (i.e. the second element + * in the
                                , * after the
                                , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                 surrounding the , while
                                + * highlight.js applies the .hljs style directly to the  tag.
                                + */
                                +.hljs {
                                +    background-color: transparent;
                                +    padding: 0;
                                +}
                                +
                                +@media only screen and (max-width: 768px) {
                                +    nav.toc {
                                +        position: fixed;
                                +        overflow-y: scroll;
                                +        width: 16em;
                                +        left: -16em;
                                +        -webkit-overflow-scrolling: touch;
                                +        -webkit-transition-property: left; /* Safari */
                                +        -webkit-transition-duration: 0.3s; /* Safari */
                                +        transition-property: left;
                                +        transition-duration: 0.3s;
                                +        -webkit-transition-timing-function: ease-out; /* Safari */
                                +        transition-timing-function: ease-out;
                                +        z-index: 2;
                                +    }
                                +
                                +    nav.toc.show {
                                +        left: 0;
                                +    }
                                +
                                +    article {
                                +        margin-left: 0;
                                +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                +        overflow-wrap: break-word;
                                +    }
                                +
                                +    article > header {
                                +        position: fixed;
                                +        left: 0;
                                +        z-index: 1;
                                +    }
                                +
                                +    article > header nav, hr {
                                +        display: none;
                                +    }
                                +
                                +    article > header div#topbar {
                                +        display: block; /* is mobile */
                                +        position: fixed;
                                +        width: 100%;
                                +        height: 1.5em;
                                +        padding-top: 1em;
                                +        padding-bottom: 1em;
                                +        background-color: #fcfcfc;
                                +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                +        top: 0;
                                +        -webkit-transition-property: top; /* Safari */
                                +        -webkit-transition-duration: 0.3s; /* Safari */
                                +        transition-property: top;
                                +        transition-duration: 0.3s;
                                +    }
                                +
                                +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                +        top: -4em;
                                +        -webkit-transition-property: top; /* Safari */
                                +        -webkit-transition-duration: 0.7s; /* Safari */
                                +        transition-property: top;
                                +        transition-duration: 0.7s;
                                +    }
                                +
                                +    article > header div#topbar span {
                                +        position: fixed;
                                +        width: 80%;
                                +        height: 1.5em;
                                +        margin-top: -0.1em;
                                +        margin-left: 0.9em;
                                +        font-size: 1.2em;
                                +        overflow: hidden;
                                +    }
                                +
                                +    article > header div#topbar a.fa-bars {
                                +        float: right;
                                +        padding: 0.6em;
                                +        margin-top: -0.6em;
                                +        margin-right: 0.3em;
                                +        font-size: 1.5em;
                                +    }
                                +
                                +    article > header div#topbar a.fa-bars:visited {
                                +        color: #3091d1;
                                +    }
                                +
                                +    article table {
                                +        overflow-x: auto;
                                +        display: block;
                                +    }
                                +
                                +    article div.MathJax_Display {
                                +        overflow: scroll;
                                +    }
                                +
                                +    article span.MathJax {
                                +        overflow: hidden;
                                +    }
                                +}
                                +
                                +@media only screen and (max-width: 320px) {
                                +    body {
                                +        font-size: 15px;
                                +    }
                                +}
                                diff --git a/v0.11.8/assets/search.js b/v0.11.8/assets/search.js
                                new file mode 100644
                                index 00000000..5d32c3aa
                                --- /dev/null
                                +++ b/v0.11.8/assets/search.js
                                @@ -0,0 +1,250 @@
                                +/*
                                + * Part of Documenter.jl
                                + *     https://github.com/JuliaDocs/Documenter.jl
                                + *
                                + * License: MIT
                                + */
                                +
                                +// parseUri 1.2.2
                                +// (c) Steven Levithan 
                                +// MIT License
                                +function parseUri (str) {
                                +	var	o   = parseUri.options,
                                +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                +		uri = {},
                                +		i   = 14;
                                +
                                +	while (i--) uri[o.key[i]] = m[i] || "";
                                +
                                +	uri[o.q.name] = {};
                                +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                +		if ($1) uri[o.q.name][$1] = $2;
                                +	});
                                +
                                +	return uri;
                                +};
                                +parseUri.options = {
                                +	strictMode: false,
                                +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                +	q:   {
                                +		name:   "queryKey",
                                +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                +	},
                                +	parser: {
                                +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                +	}
                                +};
                                +
                                +requirejs.config({
                                +    paths: {
                                +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                                +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                                +    }
                                +});
                                +
                                +var currentScript = document.currentScript;
                                +
                                +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                +    $("#search-form").submit(function(e) {
                                +        e.preventDefault()
                                +    })
                                +
                                +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                +    // ideally we'd just filter the original list but it's not available as a variable
                                +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                +        'a',
                                +        'able',
                                +        'about',
                                +        'across',
                                +        'after',
                                +        'almost',
                                +        'also',
                                +        'am',
                                +        'among',
                                +        'an',
                                +        'and',
                                +        'are',
                                +        'as',
                                +        'at',
                                +        'be',
                                +        'because',
                                +        'been',
                                +        'but',
                                +        'by',
                                +        'can',
                                +        'cannot',
                                +        'could',
                                +        'dear',
                                +        'did',
                                +        'does',
                                +        'either',
                                +        'ever',
                                +        'every',
                                +        'from',
                                +        'got',
                                +        'had',
                                +        'has',
                                +        'have',
                                +        'he',
                                +        'her',
                                +        'hers',
                                +        'him',
                                +        'his',
                                +        'how',
                                +        'however',
                                +        'i',
                                +        'if',
                                +        'into',
                                +        'it',
                                +        'its',
                                +        'just',
                                +        'least',
                                +        'like',
                                +        'likely',
                                +        'may',
                                +        'me',
                                +        'might',
                                +        'most',
                                +        'must',
                                +        'my',
                                +        'neither',
                                +        'no',
                                +        'nor',
                                +        'not',
                                +        'of',
                                +        'off',
                                +        'often',
                                +        'on',
                                +        'only',
                                +        'or',
                                +        'other',
                                +        'our',
                                +        'own',
                                +        'rather',
                                +        'said',
                                +        'say',
                                +        'says',
                                +        'she',
                                +        'should',
                                +        'since',
                                +        'so',
                                +        'some',
                                +        'than',
                                +        'that',
                                +        'the',
                                +        'their',
                                +        'them',
                                +        'then',
                                +        'there',
                                +        'these',
                                +        'they',
                                +        'this',
                                +        'tis',
                                +        'to',
                                +        'too',
                                +        'twas',
                                +        'us',
                                +        'wants',
                                +        'was',
                                +        'we',
                                +        'were',
                                +        'what',
                                +        'when',
                                +        'who',
                                +        'whom',
                                +        'why',
                                +        'will',
                                +        'would',
                                +        'yet',
                                +        'you',
                                +        'your'
                                +        ])
                                +
                                +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                +    // would not find anything if searching for "add!", only for the entire qualification
                                +    lunr.tokenizer.separator = /[\s\-\.]+/
                                +
                                +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                +    lunr.trimmer = function (token) {
                                +        return token.update(function (s) {
                                +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                +        })
                                +    }
                                +
                                +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                +
                                +    var index = lunr(function () {
                                +        this.ref('location')
                                +        this.field('title')
                                +        this.field('text')
                                +        documenterSearchIndex['docs'].forEach(function(e) {
                                +            this.add(e)
                                +        }, this)
                                +    })
                                +    var store = {}
                                +
                                +    documenterSearchIndex['docs'].forEach(function(e) {
                                +        store[e.location] = {title: e.title, category: e.category}
                                +    })
                                +
                                +    $(function(){
                                +        function update_search(querystring) {
                                +            tokens = lunr.tokenizer(querystring)
                                +            results = index.query(function (q) {
                                +                tokens.forEach(function (t) {
                                +                    q.term(t.toString(), {
                                +                        fields: ["title"],
                                +                        boost: 100,
                                +                        usePipeline: false,
                                +                        editDistance: 0,
                                +                        wildcard: lunr.Query.wildcard.NONE
                                +                    })
                                +                    q.term(t.toString(), {
                                +                        fields: ["title"],
                                +                        boost: 10,
                                +                        usePipeline: false,
                                +                        editDistance: 2,
                                +                        wildcard: lunr.Query.wildcard.NONE
                                +                    })
                                +                    q.term(t.toString(), {
                                +                        fields: ["text"],
                                +                        boost: 1,
                                +                        usePipeline: true,
                                +                        editDistance: 0,
                                +                        wildcard: lunr.Query.wildcard.NONE
                                +                    })
                                +                })
                                +            })
                                +            $('#search-info').text("Number of results: " + results.length)
                                +            $('#search-results').empty()
                                +            results.forEach(function(result) {
                                +                data = store[result.ref]
                                +                link = $('')
                                +                link.text(data.title)
                                +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                +                cat = $('('+data.category+')')
                                +                li = $('
                              • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.11.8/index.html b/v0.11.8/index.html new file mode 100644 index 00000000..c0643302 --- /dev/null +++ b/v0.11.8/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                Home

                                MathematicalSystems.jl

                                MathematicalSystems is a Julia package for mathematical systems interfaces.

                                Features

                                • Generic and flexible systems definitions, while being fast and type stable.
                                • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                                • Iterator interfaces to handle constant or time-varying inputs.

                                Library Outline

                                diff --git a/v0.11.8/lib/internals/index.html b/v0.11.8/lib/internals/index.html new file mode 100644 index 00000000..0d48bf89 --- /dev/null +++ b/v0.11.8/lib/internals/index.html @@ -0,0 +1,58 @@ + +Internals · MathematicalSystems.jl

                                Internals

                                Internals

                                This section describes functions that are internal to the library.

                                Expression handling

                                _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                                Return the system type whose field names match those in fields.

                                Input

                                • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                                • fields – tuple of field names

                                Output

                                The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                                Examples

                                julia> using MathematicalSystems: _corresponding_type
                                +
                                +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                                +LinearContinuousSystem
                                +
                                +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                                +ConstrainedLinearControlContinuousSystem
                                source
                                _capture_dim(expr)

                                Return the tuple containing the dimension(s) in expr.

                                Input

                                • expr – symbolic expression that can be of any of the following forms:

                                  • :x or :(x) – state dimension
                                  • :(x, u) – state and input dimension
                                  • :(x, u, w) – state, input and noise dimensions

                                Output

                                • The scalar x if expr specifies the state dimension.
                                • The vector [x, u] if expr specifies state and input dimension.
                                • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                                source
                                extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                                Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                                For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                                • (:A_user, :A)
                                • (:B_user, :B)
                                • (:c_user, :c)
                                • (:D_user, :D)
                                • (:f_user, :f)
                                • (:statedim_user :statedim)
                                • (:inputdim_user :inputdim)
                                • (:noisedim_user :noisedim)

                                and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                                Input

                                • equation – dynamic equation
                                • state – state variable
                                • input – input variable
                                • noise – noise variable
                                • dim – dimensionality
                                • AT – abstract system type

                                Output

                                Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                                source
                                add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                                Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                                Input

                                • summand – expressions
                                • state – state variable
                                • input – input variable
                                • noise – noise variable

                                Output

                                Multiplication expression or symbol.

                                Example

                                julia> using MathematicalSystems: add_asterisk
                                +
                                +julia> add_asterisk(:(A1*x), :x, :u, :w)
                                +:(A1 * x)
                                +
                                +julia> add_asterisk(:(c1), :x, :u, :w)
                                +:c1
                                +
                                +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                                +:(A * x1)
                                +
                                +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                                +:(A * wb)
                                +
                                +julia> add_asterisk(:(A1u), :x, :u, :w)
                                +:(A1 * u)
                                +
                                +julia> add_asterisk(:(A1ub), :x, :u, :w)
                                +:A1ub
                                source
                                Base.sortFunction.
                                sort(parameters::Vector, order::Tuple)

                                Filter and sort the vector parameters according to order.

                                Input

                                • parameters – vector of tuples
                                • order – tuple of symbols

                                Output

                                A new vector of tuples corresponding to parameters filtered and sorted according to order.

                                Examples

                                julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                                +
                                +julia> sort(parameters, (:X, :U, :W))
                                +3-element Array{Tuple{Any,Symbol},1}:
                                + (:X1, :X)
                                + (:U1, :U)
                                + (:W1, :W)
                                +
                                +julia>  parameters = [(:const, :c), (:A, :A)];
                                +
                                +julia> sort(parameters, (:A, :B, :c, :D))
                                +2-element Array{Tuple{Any,Symbol},1}:
                                + (:A, :A)
                                + (:const, :c)

                                Notes

                                parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                                If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                                source

                                Querying expressions

                                is_equation(expr)

                                Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                                Input

                                • expr – expression

                                Output

                                A Bool indicating whether expr is an equation or not.

                                source
                                extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                                Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                                Input

                                • summands – array of expressions
                                • state – state variable
                                • input – input variable
                                • noise – noise variable

                                Output

                                Array of tuples of symbols with variable name and field name.

                                Example

                                julia> using MathematicalSystems: extract_sum
                                +
                                +julia> extract_sum([:(A1*x)], :x, :u, :w)
                                +1-element Array{Tuple{Any,Symbol},1}:
                                + (:(hcat(A1)), :A)
                                +
                                +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                                +3-element Array{Tuple{Any,Symbol},1}:
                                + (:(hcat(A1)), :A)
                                + (:(hcat(B1)), :B)
                                + (:(vcat(c)), :c)
                                +
                                +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                                +3-element Array{Tuple{Any,Symbol},1}:
                                + (:(hcat(A1)), :A)
                                + (:(hcat(B1)), :B)
                                + (:(hcat(B2)), :D)

                                Notes

                                If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                                If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                                Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                                source

                                Evaluation of AbstractSystem at given state

                                _instantiate(system::AbstractSystem, x::AbstractVector;
                                +            [check_constraints]=true)

                                Return the result of instantiating an AbstractSystem at the current state.

                                Input

                                • systemAbstractSystem
                                • x – state (it should be any vector type)
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The result of applying the system to state x.

                                Notes

                                The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                                source
                                _instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;
                                +            [check_constraints]=true)

                                Return the result of instantiating an AbstractSystem at the current state and applying one input.

                                Input

                                • systemAbstractSystem
                                • x – state (it should be any vector type)
                                • u – input (it should be any vector type) or noise, if system is not controlled
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The result of applying the system to state x and input u.

                                Notes

                                If the system is not controlled but noisy, the input u is interpreted as noise.

                                The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                                source
                                _instantiate(system::AbstractSystem,
                                +            x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                Return the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.

                                Input

                                • systemAbstractSystem
                                • x – state (it should be any vector type)
                                • u – input (it should be any vector type)
                                • w – noise (it should be any vector type)
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The result of applying the system to state x, input u and noise w.

                                Notes

                                The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                                source

                                Naming convention for systems' fields

                                Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                                FieldDescriptionGetter function
                                Astate matrixstate_matrix
                                Binput matrixinput_matrix
                                caffine termaffine_term
                                Dnoise matrixnoise_matrix
                                Xstate constraintsstateset
                                Uinput constraintsinputset
                                Wdisturbance setnoiseset
                                diff --git a/v0.11.8/lib/methods/index.html b/v0.11.8/lib/methods/index.html new file mode 100644 index 00000000..dab9bb4e --- /dev/null +++ b/v0.11.8/lib/methods/index.html @@ -0,0 +1,17 @@ + +Methods · MathematicalSystems.jl

                                Methods

                                Methods

                                This section describes systems methods implemented in MathematicalSystems.jl.

                                States

                                statedim(s::AbstractSystem)

                                Returns the dimension of the state space of system s.

                                source
                                stateset(s::AbstractSystem)

                                Returns the set of allowed states of system s.

                                source

                                Inputs

                                inputdim(s::AbstractSystem)

                                Returns the dimension of the input space of system s.

                                source
                                inputset(s::AbstractSystem)

                                Returns the set of allowed inputs of system s.

                                source
                                nextinput(input::ConstantInput, n::Int=1)

                                Returns the first n elements of this input.

                                Input

                                • input – a constant input
                                • n – (optional, default: 1) the number of desired elements

                                Output

                                A repeated iterator that generates n equal samples of this input.

                                source
                                nextinput(input::VaryingInput, n::Int=1)

                                Returns the first n elements of this input.

                                Input

                                • input – varying input
                                • n – (optional, default: 1) number of desired elements

                                Output

                                An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                source

                                Noises

                                noisedim(s::AbstractSystem)

                                Returns the dimension of the noise space of system s.

                                source
                                noiseset(s::AbstractSystem)

                                Returns the set of allowed noises of system s.

                                source

                                Output

                                outputdim(m::AbstractMap)

                                Returns the dimension of the output space of the map m.

                                source
                                outputmap(s::SystemWithOutput)

                                Returns the output map of a system with output.

                                source

                                Traits

                                islinear(s::AbstractSystem)

                                Specifies if the dynamics of system s is specified by linear equations.

                                Notes

                                We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                                [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                                source
                                islinear(m::AbstractMap)

                                Specifies if the map m is linear or not.

                                Notes

                                A map is linear if it preserves the operations of scalar multiplication and vector addition.

                                source
                                isaffine(s::AbstractSystem)

                                Specifies if the dynamics of system s is specified by affine equations.

                                Notes

                                An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                                source
                                ispolynomial(s::AbstractSystem)

                                Specifies if the dynamics of system s is specified by polynomial equations.

                                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                                source
                                isaffine(m::AbstractMap)

                                Specifies if the map m is affine or not.

                                Notes

                                An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                                source
                                isblackbox(s::AbstractSystem)

                                Specifies if no specific structure is assumed for the dynamics of system s.

                                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                                source
                                isnoisy(s::AbstractSystem)

                                Determines if the dynamics of system s contains a noise term w.

                                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                                source
                                iscontrolled(s::AbstractSystem)

                                Determines if the dynamics of system s contains a control input u.

                                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                                source
                                isconstrained(s::AbstractSystem)

                                Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                                The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                                source
                                state_matrix(s::AbstractSystem)

                                Return the state matrix of an affine system.

                                Notes

                                The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                                source
                                input_matrix(s::AbstractSystem)

                                Return the input matrix of a system with linear input.

                                Notes

                                The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                                source
                                noise_matrix(s::AbstractSystem)

                                Return the noise matrix of a system with linear noise.

                                Notes

                                The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                                source
                                affine_term(s::AbstractSystem)

                                Return the affine term in an affine system.

                                Notes

                                The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                                source

                                Maps

                                apply(m::AbstractMap, args...)

                                Apply the rule specified by the map to the given arguments.

                                source

                                Successor

                                successor(system::DiscreteIdentitySystem, x::AbstractVector)

                                Return the successor state of a DiscreteIdentitySystem.

                                Input

                                • systemDiscreteIdentitySystem
                                • x – state (it should be any vector type)

                                Output

                                The same state x.

                                source
                                successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                                +          [check_constraints]=true)

                                Return the successor state of a ConstrainedDiscreteIdentitySystem.

                                Input

                                • systemConstrainedDiscreteIdentitySystem
                                • x – state (it should be any vector type)
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The same state x.

                                source
                                successor(system::AbstractDiscreteSystem, x::AbstractVector;
                                +          [check_constraints]=true)

                                Return the successor state of an AbstractDiscreteSystem.

                                Input

                                • systemAbstractDiscreteSystem
                                • x – state (it should be any vector type)
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The result of applying the system to state x.

                                source
                                successor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;
                                +          [check_constraints]=true)

                                Return the successor state of an AbstractDiscreteSystem.

                                Input

                                • systemAbstractDiscreteSystem
                                • x – state (it should be any vector type)
                                • u – input (it should be any vector type) or noise, if system is not controlled
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The result of applying the system to state x and input u.

                                Notes

                                If the system is not controlled but noisy, the input u is interpreted as noise.

                                source
                                successor(system::AbstractDiscreteSystem,
                                +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                Return the successor state of an AbstractDiscreteSystem.

                                Input

                                • systemAbstractDiscreteSystem
                                • x – state (it should be any vector type)
                                • u – input (it should be any vector type)
                                • w – noise (it should be any vector type)
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The result of applying the system to state x, input u and noise w.

                                source

                                Vector Field

                                vector_field(system::ContinuousIdentitySystem, x::AbstractVector)

                                Return the vector field state of a ContinuousIdentitySystem.

                                Input

                                • systemContinuousIdentitySystem
                                • x – state (it should be any vector type)

                                Output

                                A zeros vector of dimension statedim.

                                source
                                vector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;
                                +          [check_constraints]=true)

                                Return the vector field state of a ConstrainedContinuousIdentitySystem.

                                Input

                                • systemConstrainedContinuousIdentitySystem
                                • x – state (it should be any vector type)
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                A zeros vector of dimension statedim.

                                source
                                vector_field(system::AbstractContinuousSystem, x::AbstractVector;
                                +          [check_constraints]=true)

                                Return the vector field state of an AbstractContinuousSystem.

                                Input

                                • systemAbstractContinuousSystem
                                • x – state (it should be any vector type)
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The vector field of the system at state x.

                                source
                                vector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;
                                +          [check_constraints]=true)

                                Return the vector field state of an AbstractContinuousSystem.

                                Input

                                • systemAbstractContinuousSystem
                                • x – state (it should be any vector type)
                                • u – input (it should be any vector type) or noise, if system is not controlled
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The vector field of the system at state x and applying input u.

                                Notes

                                If the system is not controlled but noisy, the input u is interpreted as noise.

                                source
                                vector_field(system::AbstractContinuousSystem,
                                +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                Return the vector field state of an AbstractContinuousSystem.

                                Input

                                • systemAbstractContinuousSystem
                                • x – state (it should be any vector type)
                                • u – input (it should be any vector type)
                                • w – noise (it should be any vector type)
                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                Output

                                The vector field of the system at state x and applying input u and noise w.

                                source

                                Discretization

                                discretize(system::AbstractContinuousSystem, ΔT::Real,
                                +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                                +           constructor=_default_complementary_constructor(system))

                                Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                                Input

                                • system – an affine continuous system
                                • ΔT – sampling time
                                • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                                • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                                Output

                                Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                                source

                                Internal Methods

                                _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                                +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                                Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                                Input

                                • `` – discretization algorithm, used for dispatch
                                • ΔT – sampling time
                                • A – state matrix
                                • B – input matrix
                                • c – vector
                                • D – noise matrix

                                Output

                                Returns a vector containing the discretized input arguments A, B, c and D.

                                Notes

                                See discretize for more details.

                                source
                                _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                                Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                                Input

                                • A – state matrix
                                • ΔT – sampling time
                                • algorithm – (optional, default: :exact) discretization algorithm

                                Output

                                Returns a vector containing the discretized input argument A.

                                Notes

                                See discretize for more details.

                                source
                                _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                                +            A::AbstractMatrix, B::AbstractMatrix)

                                Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                                Input

                                • algorithm – discretization algorithm
                                • ΔT – sampling time
                                • A – state matrix
                                • B – input or noise matrix

                                Output

                                Returns a vector containing the discretized input arguments A and B.

                                Notes

                                This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                                See discretize for more details.

                                source
                                _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                                +            A::AbstractMatrix,c::AbstractVector)

                                Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                                Input

                                • algorithm – discretization algorithm
                                • ΔT – sampling time
                                • A – state matrix
                                • c – vector

                                Output

                                Returns a vector containing the discretized input arguments A and c.

                                Notes

                                See discretize for more details.

                                source
                                _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                                +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                                Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                                Input

                                • algorithm – discretization algorithm
                                • ΔT – sampling time
                                • A – state matrix
                                • B – input matrix
                                • c – vector

                                Output

                                Returns a vector containing the discretized input arguments A, B and c.

                                Notes

                                See discretize for more details.

                                source
                                _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                                +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                                Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                                Input

                                • algorithm – discretization algorithm
                                • ΔT – sampling time
                                • A – state matrix
                                • B – input matrix
                                • D – noise matrix

                                Output

                                Returns a vector containing the discretized input arguments A, B and D.

                                Notes

                                See discretize for more details.

                                source
                                typename(system::AbstractSystem)

                                Returns the base type of system without parameter information.

                                Input

                                • systemAbstractSystem

                                Output

                                The base type of system.

                                source
                                _complementary_type(system_type::Type{<:AbstractSystem})

                                Return the complementary type of a system type system_type.

                                Input

                                • system_type – type of AbstractSystem

                                Ouput

                                Return complementary type of system_type.

                                Notes

                                There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                                To get the complementary type of system type, use _complementary_type(typename(system)).

                                source
                                diff --git a/v0.11.8/lib/types/index.html b/v0.11.8/lib/types/index.html new file mode 100644 index 00000000..a7995b1b --- /dev/null +++ b/v0.11.8/lib/types/index.html @@ -0,0 +1,127 @@ + +Types · MathematicalSystems.jl

                                Types

                                Types

                                This section describes systems types implemented in MathematicalSystems.jl.

                                Abstract Systems

                                AbstractSystem

                                Abstract supertype for all system types.

                                source
                                AbstractContinuousSystem

                                Abstract supertype for all continuous system types.

                                source
                                AbstractDiscreteSystem

                                Abstract supertype for all discrete system types.

                                source

                                Continuous Systems

                                ContinuousIdentitySystem <: AbstractContinuousSystem

                                Trivial identity continuous-time system of the form:

                                \[ x(t)' = 0 \; \forall t.\]

                                Fields

                                • statedim – number of state variables
                                source
                                ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                Trivial identity continuous-time system with domain constraints of the form:

                                \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                Fields

                                • statedim – number of state variables
                                • X – state constraints
                                source
                                LinearContinuousSystem

                                Continuous-time linear system of the form:

                                \[ x(t)' = A x(t) \; \forall t.\]

                                Fields

                                • A – state matrix
                                source
                                AffineContinuousSystem

                                Continuous-time affine system of the form:

                                \[ x(t)' = A x(t) + c \; \forall t.\]

                                Fields

                                • A – state matrix
                                • c – affine term
                                source
                                LinearControlContinuousSystem

                                Continuous-time linear control system of the form:

                                \[ x(t)' = A x(t) + B u(t) \; \forall t.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                source
                                AffineControlContinuousSystem

                                Continuous-time affine control system of the form:

                                \[ x(t)' = A x(t) + B u(t) + c, \; \forall t.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • c – affine term
                                source
                                ConstrainedLinearContinuousSystem

                                Continuous-time linear system with domain constraints of the form:

                                \[ x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                Fields

                                • A – state matrix
                                • X – state constraints
                                source
                                ConstrainedAffineContinuousSystem

                                Continuous-time affine system with domain constraints of the form:

                                \[ x(t)' = A x(t) + c, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                Fields

                                • A – state matrix
                                • c – affine term
                                • X – state constraints
                                source
                                ConstrainedAffineControlContinuousSystem

                                Continuous-time affine control system with domain constraints of the form:

                                \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • c – affine term
                                • X – state constraints
                                • U – input constraints
                                source
                                ConstrainedLinearControlContinuousSystem

                                Continuous-time linear control system with domain constraints of the form:

                                \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • X – state constraints
                                • U – input constraints
                                source
                                LinearAlgebraicContinuousSystem

                                Continuous-time linear algebraic system of the form:

                                \[ E x(t)' = A x(t) \; \forall t.\]

                                Fields

                                • A – state matrix
                                • E – matrix, same size as A
                                source
                                ConstrainedLinearAlgebraicContinuousSystem

                                Continuous-time linear system with domain constraints of the form:

                                \[ E x(t)' = A x(t), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                Fields

                                • A – state matrix
                                • E – matrix, same size as A
                                • X – state constraints
                                source
                                PolynomialContinuousSystem

                                Continuous-time polynomial system of the form:

                                \[ x(t)' = p(x(t)) \; \forall t.\]

                                Fields

                                • p – polynomial vector field
                                • statedim – number of state variables
                                source
                                ConstrainedPolynomialContinuousSystem

                                Continuous-time polynomial system with domain constraints:

                                \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                Fields

                                • p – polynomial vector field
                                • X – constraint set
                                • statedim – number of state variables
                                source
                                BlackBoxContinuousSystem <: AbstractContinuousSystem

                                Continuous-time system defined by a right-hand side of the form:

                                \[ x(t)' = f(x(t)) \; \forall t.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                source
                                ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                                Continuous-time system defined by a right-hand side with domain constraints of the form:

                                \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • X – state constraints
                                source
                                BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                Continuous-time control system defined by a right-hand side of the form:

                                \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • inputdim – number of input variables
                                source
                                ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                Continuous-time control system defined by a right-hand side with domain constraints of the form:

                                \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • inputdim – number of input variables
                                • X – state constraints
                                • U – input constraints
                                source
                                NoisyLinearContinuousSystem

                                Continuous-time linear system with additive disturbance of the form:

                                \[ x(t)' = A x(t) + D w(t) \; \forall t.\]

                                Fields

                                • A – state matrix
                                • D – noise matrix
                                source
                                NoisyConstrainedLinearContinuousSystem

                                Continuous-time linear system with additive disturbance and domain constraints of the form:

                                \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                                Fields

                                • A – state matrix
                                • D – noise matrix
                                • X – state constraints
                                • W – disturbance set
                                source
                                NoisyLinearControlContinuousSystem

                                Continuous-time linear control system with additive disturbance of the form:

                                \[ x(t)' = A x(t) + B u(t) + D w(t) \; \forall t.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • D – noise matrix
                                source
                                NoisyConstrainedLinearControlContinuousSystem

                                Continuous-time linear control system with additive disturbance and domain constraints of the form:

                                \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • D – noise matrix
                                • X – state constraints
                                • U – input constraints
                                • W – disturbance set
                                source
                                NoisyAffineControlContinuousSystem

                                Continuous-time affine control system with additive disturbance of the form:

                                \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • c – affine term
                                • D – noise matrix
                                source
                                NoisyConstrainedAffineControlContinuousSystem

                                Continuous-time affine control system with additive disturbance and domain constraints of the form:

                                \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • c – affine term
                                • D – noise matrix
                                • X – state constraints
                                • U – input constraints
                                • W – disturbance set
                                source
                                NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                                \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • inputdim – number of input variables
                                • noisedim – number of noise variables
                                source
                                NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                                \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • inputdim – number of input variables
                                • noisedim – number of noise variables
                                • X – state constraints
                                • U – input constraints
                                • W – disturbance set
                                source
                                SecondOrderLinearContinuousSystem

                                Continuous-time second order linear system of the form:

                                \[ Mx''(t) + Cx'(t) + Kx(t) = 0\; \forall t.\]

                                Fields

                                • M – mass matrix
                                • C – viscosity matrix
                                • K – stiffness matrix
                                source
                                SecondOrderAffineContinuousSystem

                                Continuous-time second order affine system of the form:

                                \[ Mx''(t) + Cx'(t) + Kx(t) = b\; \forall t.\]

                                Fields

                                • M – mass matrix
                                • C – viscosity matrix
                                • K – stiffness matrix
                                • b – affine term
                                source
                                SecondOrderConstrainedAffineControlContinuousSystem

                                Continuous-time second order constrained affine control system of the form:

                                \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t) + d, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                Fields

                                • M – mass matrix
                                • C – viscosity matrix
                                • K – stiffness matrix
                                • B – input matrix
                                • d – affine term
                                • X – state constraints
                                • U – input constraints
                                source
                                SecondOrderConstrainedLinearControlContinuousSystem

                                Continuous-time second order constrained linear control system of the form:

                                \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                Fields

                                • M – mass matrix
                                • C – viscosity matrix
                                • K – stiffness matrix
                                • B – input matrix
                                • X – state constraints
                                • U – input constraints
                                source

                                Discrete Systems

                                DiscreteIdentitySystem <: AbstractDiscreteSystem

                                Trivial identity discrete-time system of the form:

                                \[ x_{k+1} = x_k \; \forall k.\]

                                Fields

                                • statedim – number of state variables
                                source
                                ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                Trivial identity discrete-time system with domain constraints of the form:

                                \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                                Fields

                                • statedim – number of state variables
                                • X – state constraints
                                source
                                LinearDiscreteSystem

                                Discrete-time linear system of the form:

                                \[ x_{k+1} = A x_k \; \forall k.\]

                                Fields

                                • A – state matrix
                                source
                                AffineDiscreteSystem

                                Discrete-time affine system of the form:

                                \[ x_{k+1} = A x_k + c \; \forall k.\]

                                Fields

                                • A – state matrix
                                • c – affine term
                                source
                                LinearControlDiscreteSystem

                                Discrete-time linear control system of the form:

                                \[ x_{k+1} = A x_k + B u_k \; \forall k.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                source
                                AffineControlDiscreteSystem

                                Continuous-time affine control system of the form:

                                \[ x_{k+1} = A x_k + B u_k + c, \; \forall k.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • c – affine term
                                source
                                ConstrainedLinearDiscreteSystem

                                Discrete-time linear system with domain constraints of the form:

                                \[ x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                                Fields

                                • A – state matrix
                                • X – state constraints
                                source
                                ConstrainedAffineDiscreteSystem

                                Discrete-time affine system with domain constraints of the form:

                                \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                                Fields

                                • A – state matrix
                                • c – affine term
                                • X – state constraints
                                source
                                ConstrainedLinearControlDiscreteSystem

                                Discrete-time linear control system with domain constraints of the form:

                                \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • X – state constraints
                                • U – input constraints
                                source
                                ConstrainedAffineControlDiscreteSystem

                                Continuous-time affine control system with domain constraints of the form:

                                \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • c – affine term
                                • X – state constraints
                                • U – input constraints
                                source
                                LinearAlgebraicDiscreteSystem

                                Discrete-time linear algebraic system of the form:

                                \[ E x_{k+1} = A x_k \; \forall k.\]

                                Fields

                                • A – state matrix
                                • E – matrix, same size as A
                                source
                                ConstrainedLinearAlgebraicDiscreteSystem

                                Discrete-time linear system with domain constraints of the form:

                                \[ E x_{k+1} = A x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                                Fields

                                • A – state matrix
                                • E – matrix, same size as A
                                • X – state constraints
                                source
                                PolynomialDiscreteSystem

                                Discrete-time polynomial system of the form:

                                \[ x_{k+1} = p(x_k) \; \forall k.\]

                                Fields

                                • p – polynomial vector field
                                • statedim – number of state variables
                                source
                                ConstrainedPolynomialDiscreteSystem

                                Discrete-time polynomial system with domain constraints:

                                \[ x_{k+1} = p(x_k), \;  x_k ∈ \mathcal{X} \; \forall k.\]

                                Fields

                                • p – polynomial
                                • X – constraint set
                                • statedim – number of state variables
                                source
                                BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                Discrete-time system defined by a right-hand side of the form:

                                \[ x_{k+1} = f(x_k) \; \forall k.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                source
                                ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                Discrete-time system defined by a right-hand side with domain constraints of the form:

                                \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • X – state constraints
                                source
                                BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                Discrete-time control system defined by a right-hand side of the form:

                                \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • inputdim – number of input variables
                                source
                                ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                Discrete-time control system defined by a right-hand side with domain constraints of the form:

                                \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • inputdim – number of input variables
                                • X – state constraints
                                • U – input constraints
                                source
                                NoisyLinearDiscreteSystem

                                Discrete-time linear system with additive disturbance of the form:

                                \[ x_{k+1} = A x_k + D w_k \; \forall k.\]

                                Fields

                                • A – state matrix
                                • D – noise matrix
                                source
                                NoisyConstrainedLinearDiscreteSystem

                                Discrete-time linear system with additive disturbance and domain constraints of the form:

                                \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                                Fields

                                • A – state matrix
                                • D – noise matrix
                                • X – state constraints
                                • W – disturbance set
                                source
                                NoisyLinearControlDiscreteSystem

                                Continuous-time linear control system with additive disturbance of the form:

                                \[ x_{k+1} = A x_k + B u_k + D w_k \; \forall k.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • D – noise matrix
                                source
                                NoisyConstrainedLinearControlDiscreteSystem

                                Continuous-time linear control system with additive disturbance and domain constraints of the form:

                                \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • D – noise matrix
                                • X – state constraints
                                • U – input constraints
                                • W – disturbance set
                                source
                                NoisyAffineControlDiscreteSystem

                                Continuous-time affine control system with additive disturbance of the form:

                                \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • c – affine term
                                • D – noise matrix
                                source
                                NoisyConstrainedAffineControlDiscreteSystem

                                Continuous-time affine control system with additive disturbance and domain constraints of the form:

                                \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                                Fields

                                • A – state matrix
                                • B – input matrix
                                • c – affine term
                                • D – noise matrix
                                • X – state constraints
                                • U – input constraints
                                • W – disturbance set
                                source
                                NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                                \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • inputdim – number of input variables
                                • noisedim – number of noise variables
                                source
                                NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                                \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                                Fields

                                • f – function that holds the right-hand side
                                • statedim – number of state variables
                                • inputdim – number of input variables
                                • noisedim – number of noise variables
                                • X – state constraints
                                • U – input constraints
                                • W – disturbance set
                                source
                                SecondOrderLinearDiscreteSystem

                                Discrete-time second order linear system of the form:

                                \[ Mx_{k+2} + Cx_{k+1} + Kx_k = 0\; \forall k.\]

                                Fields

                                • M – mass matrix
                                • C – viscosity matrix
                                • K – stiffness matrix
                                source
                                SecondOrderAffineDiscreteSystem

                                Discrete-time second order affine system of the form:

                                \[ Mx_{k+2} + Cx_{k+1} + Kx_k = b\; \forall k.\]

                                Fields

                                • M – mass matrix
                                • C – viscosity matrix
                                • K – stiffness matrix
                                • b – affine term
                                source
                                SecondOrderConstrainedAffineControlDiscreteSystem

                                Discrete-time second order constrained affine control system of the form:

                                \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k + d, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                Fields

                                • M – mass matrix
                                • C – viscosity matrix
                                • K – stiffness matrix
                                • B – input matrix
                                • d – affine term
                                • X – state constraints
                                • U – input constraints
                                source
                                SecondOrderConstrainedLinearControlDiscreteSystem

                                Discrete-time second order constrained linear control system of the form:

                                \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                Fields

                                • M – mass matrix
                                • C – viscosity matrix
                                • K – stiffness matrix
                                • B – input matrix
                                • X – state constraints
                                • U – input constraints
                                source

                                Discretization Algorithms

                                AbstractDiscretizationAlgorithm

                                Abstract supertype for all discretization algorithms.

                                Note

                                For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                                _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                                +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                                are required.

                                source
                                ExactDiscretization <: AbstractDiscretizationAlgorithm

                                Exact discretization algorithm for affine systems.

                                Algorithm

                                This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                                Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                                The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                                The algorithm described above is a well known result from the literature [1].

                                [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                                source
                                EulerDiscretization <: AbstractDiscretizationAlgorithm

                                Euler discretization algorithm for affine systems.

                                Algorithm

                                This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                                Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                                The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                                The algorithm described above is a well known result from the literature [1].

                                [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                                source

                                System macro

                                system(expr...)

                                Return an instance of the system type corresponding to the given expressions.

                                Input

                                • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                                Output

                                A system that best matches the given expressions.

                                Notes

                                Terms. The expression expr contains one or more of the following sub-expressions:

                                • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                                • set constraints, e.g. x ∈ X
                                • input constraints, e.g. u ∈ U
                                • dimensionality, e.g. dim: (2,1) or dim = 1
                                • specification of the input variable, e.g. input: u or input = u
                                • specification of the noise variable, e,g, noise: w or noise = w

                                The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                                @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                                The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                                Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                                Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                                Exceptions. The following exceptions and particular cases apply:

                                • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                                • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                                • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                                Examples

                                Let us first create a continuous linear system using this macro:

                                julia> A = [1. 0; 0 1.];
                                +
                                +julia> @system(x' = A*x)
                                +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                                A discrete system is defined by using :

                                julia> @system(x⁺ = A*x)
                                +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                                Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                                julia> using LazySets
                                +
                                +julia> B = Matrix([1. 0.5]');
                                +
                                +julia> c = [1., 1.5];
                                +
                                +julia> X = BallInf(zeros(2), 10.);
                                +
                                +julia> U = BallInf(zeros(1), 2.);
                                +
                                +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                                +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                                For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                                julia> f(x, u) = x + u;
                                +
                                +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                                +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                                source

                                Initial-value problem macro

                                ivp(expr...)

                                Return an instance of the initial-value problem type corresponding to the given expressions.

                                Input

                                • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                                Output

                                An initial-value problem that best matches the given expressions.

                                Notes

                                This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                                The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

                                Examples

                                julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                                +
                                +julia> typeof(p)
                                +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                                +
                                +julia> initial_state(p)
                                +1-element Array{Float64,1}:
                                + 1.0
                                +
                                +julia> sys = @system(x' = [1 0; 0 1] * x);
                                +
                                +julia> @ivp(sys, x(0) ∈ [-1, 1])
                                +InitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])
                                source

                                Identity operator

                                IdentityMultiple{T} < AbstractMatrix{T} where T

                                A scalar multiple of the identity matrix of given order and numeric type.

                                Fields

                                • M – uniform scaling operator of type T
                                • n – size of the identity matrix

                                Notes

                                This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                                Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                                The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                                Examples

                                The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                                julia> using MathematicalSystems: IdentityMultiple
                                +
                                +julia> I2 = I(2)
                                +IdentityMultiple{Float64} of value 1.0 and order 2
                                +
                                +julia> I2 + I2
                                +IdentityMultiple{Float64} of value 2.0 and order 2
                                +
                                +julia> 4*I2
                                +IdentityMultiple{Float64} of value 4.0 and order 2

                                The numeric type (default Float64) can be passed as a second argument:

                                julia> I2r = I(2, Rational{Int})
                                +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                                +
                                +julia> I2r + I2r
                                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                +
                                +julia> 4*I2r
                                +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                                To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                                julia> I2 = I(2.0, 2)
                                +IdentityMultiple{Float64} of value 2.0 and order 2
                                +
                                +julia> I2r = I(2//1, 2)
                                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                                Or use the constructor passing the UniformScaling (I):

                                julia> I2 = IdentityMultiple(2.0*I, 2)
                                +IdentityMultiple{Float64} of value 2.0 and order 2
                                +
                                +julia> I2r = IdentityMultiple(2//1*I, 2)
                                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                source

                                Initial Value Problems

                                InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                                Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                                Fields

                                • s – system
                                • x0 – initial state

                                Examples

                                The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                                julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                                +
                                +julia> x₀ = [-1/2, 1/2];
                                +
                                +julia> p = InitialValueProblem(s, x₀);
                                +
                                +julia> initial_state(p) # same as p.x0
                                +2-element Array{Float64,1}:
                                + -0.5
                                +  0.5
                                +
                                +julia> statedim(p)
                                +2
                                +
                                +julia> inputdim(p)
                                +0
                                source
                                IVP

                                IVP is an alias for InitialValueProblem.

                                source
                                initial_state(ivp::InitialValueProblem)

                                Return the initial state of an initial-value problem.

                                Input

                                • ivp – initial-value problem

                                Output

                                The initial state of an initial-value problem.

                                source
                                system(ivp::InitialValueProblem)

                                Return the system wrapped by an initial-value problem.

                                Input

                                • ivp – initial-value problem

                                Output

                                The system of the given initial-value problem.

                                source

                                Input Types

                                AbstractInput

                                Abstract supertype for all input types.

                                Notes

                                The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                source
                                ConstantInput{UT} <: AbstractInput

                                Type representing an input that remains constant in time.

                                Fields

                                • U – input set

                                Examples

                                The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                julia> c = ConstantInput(-1//2)
                                +ConstantInput{Rational{Int64}}(-1//2)
                                +
                                +julia> iterate(c, 1)
                                +(-1//2, nothing)
                                +
                                +julia> iterate(c, 2)
                                +(-1//2, nothing)
                                +
                                +julia> collect(nextinput(c, 4))
                                +4-element Array{Rational{Int64},1}:
                                + -1//2
                                + -1//2
                                + -1//2
                                + -1//2

                                The elements of this input are rational numbers:

                                julia> eltype(c)
                                +Rational{Int64}

                                To transform a constant input, you can use map as in:

                                julia> map(x->2*x, c)
                                +ConstantInput{Rational{Int64}}(-1//1)
                                source
                                VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                                Type representing an input that may vary with time.

                                Fields

                                • U – vector of input sets

                                Examples

                                The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                julia> v = VaryingInput([-1//2, 1//2])
                                +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                                +
                                +julia> length(v)
                                +2
                                +
                                +julia> eltype(v)
                                +Rational{Int64}

                                Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                julia> iterate(v, 1)
                                +(-1//2, 2)
                                +
                                +julia> iterate(v, 2)
                                +(1//2, 3)

                                The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                julia> typeof(nextinput(v))
                                +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                                +
                                +julia> collect(nextinput(v, 1))
                                +1-element Array{Rational{Int64},1}:
                                + -1//2
                                +
                                +julia> collect(nextinput(v, 2))
                                +2-element Array{Rational{Int64},1}:
                                + -1//2
                                +  1//2

                                You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                julia> collect(v)
                                +2-element Array{Rational{Int64},1}:
                                + -1//2
                                +  1//2
                                +
                                +julia> [2*vi for vi in v]
                                +2-element Array{Rational{Int64},1}:
                                + -1//1
                                +  1//1

                                Since this input type is finite, querying more elements than its length returns the full vector:

                                julia> collect(nextinput(v, 4))
                                +2-element Array{Rational{Int64},1}:
                                + -1//2
                                +  1//2

                                To transform a varying input, you can use map as in:

                                julia> map(x->2*x, v)
                                +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                                source

                                Maps

                                AbstractMap

                                Abstract supertype for all map types.

                                source
                                IdentityMap

                                An identity map,

                                \[ x ↦ x.\]

                                Fields

                                • dim – dimension
                                source
                                ConstrainedIdentityMap

                                An identity map with state constraints of the form:

                                \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                                Fields

                                • dim – dimension
                                • X – state constraints
                                source
                                LinearMap

                                A linear map,

                                \[ x ↦ Ax\]

                                Fields

                                • A – matrix
                                source
                                ConstrainedLinearMap

                                A linear map with state constraints of the form:

                                \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                                Fields

                                • A – matrix
                                • X – state constraints
                                source
                                AffineMap

                                An affine map,

                                \[ x ↦ Ax + c.\]

                                Fields

                                • A – matrix
                                • c – vector
                                source
                                ConstrainedAffineMap

                                An affine map with state constraints of the form:

                                \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                                Fields

                                • A – matrix
                                • c – vector
                                • X – state constraints
                                source
                                LinearControlMap

                                A linear control map,

                                \[ (x, u) ↦ Ax + Bu.\]

                                Fields

                                • A – matrix
                                • B – matrix
                                source
                                ConstrainedLinearControlMap

                                A linear control map with state and input constraints,

                                \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                Fields

                                • A – matrix
                                • B – matrix
                                • X – state constraints
                                • U – input constraints
                                source
                                AffineControlMap

                                An affine control map,

                                \[ (x, u) ↦ Ax + Bu + c.\]

                                Fields

                                • A – matrix
                                • B – matrix
                                • c – vector
                                source
                                ConstrainedAffineControlMap

                                An affine control map with state and input constraints,

                                \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                Fields

                                • A – matrix
                                • B – matrix
                                • c – vector
                                • X – state constraints
                                • U – input constraints
                                source
                                ResetMap

                                A reset map,

                                \[ x ↦ R(x),\]

                                such that a subset of the variables is given a specified value, and the rest are unchanged.

                                Fields

                                • dim – dimension
                                • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                source
                                ConstrainedResetMap

                                A reset map with state constraints of the form:

                                \[ x ↦ R(x), x ∈ \mathcal{X},\]

                                such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                                Fields

                                • dim – dimension
                                • X – state constraints
                                • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                source

                                Macros

                                map(ex, args)

                                Return an instance of the map type corresponding to the given expression.

                                Input

                                • ex – an expression defining the map, in the form of an anonymous function
                                • args – additional optional arguments

                                Output

                                A map that best matches the given expression.

                                Examples

                                Let us first create a linear map using this macro:

                                julia> @map x -> [1 0; 0 0]*x
                                +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                                We can create an affine system as well:

                                julia> @map x -> [1 0; 0 0]*x + [2, 0]
                                +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                                Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                                julia> @map(x -> x, dim=5)
                                +IdentityMap(5)

                                A state constraint on such map can be specified passing the additional argument x ∈ X.

                                An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                                julia> @map x -> I(5)*x
                                +IdentityMap(5)
                                source

                                Systems with output

                                SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem

                                Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                Fields

                                • s – system of type ST
                                • outputmap – output map of type MT
                                source
                                LinearTimeInvariantSystem(A, B, C, D)

                                A linear time-invariant system with of the form

                                \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                                Input

                                • A – matrix
                                • B – matrix
                                • C – matrix
                                • D – matrix

                                Output

                                A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                source
                                LinearTimeInvariantSystem(A, B, C, D, X, U)

                                A linear time-invariant system with state and input constraints of the form

                                \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                                where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                Input

                                • A – matrix
                                • B – matrix
                                • C – matrix
                                • D – matrix
                                • X – state constraints
                                • U – input constraints

                                Output

                                A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                source
                                LTISystem

                                LTISystem is an alias for LinearTimeInvariantSystem.

                                source

                                Vector Field

                                VectorField{T<:Function}

                                Type that computes the vector field of an AbstractContinuousSystem.

                                Fields

                                • field – function for calculating the vector field
                                source
                                diff --git a/v0.11.8/search/index.html b/v0.11.8/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.11.8/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                Search

                                Search

                                Number of results: loading...

                                  diff --git a/v0.11.8/search_index.js b/v0.11.8/search_index.js new file mode 100644 index 00000000..ca280850 --- /dev/null +++ b/v0.11.8/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Evaluation-of-AbstractSystem-at-given-state-1","page":"Internals","title":"Evaluation of AbstractSystem at given state","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_instantiate","category":"page"},{"location":"lib/internals/#MathematicalSystems._instantiate","page":"Internals","title":"MathematicalSystems._instantiate","text":"_instantiate(system::AbstractSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying one input.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields-1","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nAffineControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem\nSecondOrderLinearContinuousSystem\nSecondOrderAffineContinuousSystem\nSecondOrderConstrainedAffineControlContinuousSystem\nSecondOrderConstrainedLinearControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.AffineControlContinuousSystem","text":"AffineControlContinuousSystem\n\nContinuous-time affine control system of the form:\n\n x(t) = A x(t) + B u(t) + c forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearContinuousSystem","text":"SecondOrderLinearContinuousSystem\n\nContinuous-time second order linear system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = 0 forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineContinuousSystem","text":"SecondOrderAffineContinuousSystem\n\nContinuous-time second order affine system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = b forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","text":"SecondOrderConstrainedAffineControlContinuousSystem\n\nContinuous-time second order constrained affine control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t) + d  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","text":"SecondOrderConstrainedLinearControlContinuousSystem\n\nContinuous-time second order constrained linear control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nAffineControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem\nSecondOrderLinearDiscreteSystem\nSecondOrderAffineDiscreteSystem\nSecondOrderConstrainedAffineControlDiscreteSystem\nSecondOrderConstrainedLinearControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineControlDiscreteSystem","text":"AffineControlDiscreteSystem\n\nContinuous-time affine control system of the form:\n\n x_k+1 = A x_k + B u_k + c forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearDiscreteSystem","text":"SecondOrderLinearDiscreteSystem\n\nDiscrete-time second order linear system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = 0 forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineDiscreteSystem","text":"SecondOrderAffineDiscreteSystem\n\nDiscrete-time second order affine system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = b forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","text":"SecondOrderConstrainedAffineControlDiscreteSystem\n\nDiscrete-time second order constrained affine control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k + d  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","text":"SecondOrderConstrainedLinearControlDiscreteSystem\n\nDiscrete-time second order constrained linear control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms-1","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro-1","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nA state constraint on such map can be specified passing the additional argument x ∈ X.\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Vector-Field-1","page":"Types","title":"Vector Field","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"VectorField","category":"page"},{"location":"lib/types/#MathematicalSystems.VectorField","page":"Types","title":"MathematicalSystems.VectorField","text":"VectorField{T<:Function}\n\nType that computes the vector field of an AbstractContinuousSystem.\n\nFields\n\nfield – function for calculating the vector field\n\n\n\n\n\n","category":"type"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Noises-1","page":"Methods","title":"Noises","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"noisedim\nnoiseset","category":"page"},{"location":"lib/methods/#MathematicalSystems.noisedim","page":"Methods","title":"MathematicalSystems.noisedim","text":"noisedim(s::AbstractSystem)\n\nReturns the dimension of the noise space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.noiseset","page":"Methods","title":"MathematicalSystems.noiseset","text":"noiseset(s::AbstractSystem)\n\nReturns the set of allowed noises of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisblackbox(::AbstractSystem)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isblackbox-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isblackbox","text":"isblackbox(s::AbstractSystem)\n\nSpecifies if no specific structure is assumed for the dynamics of system s.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(s::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(s::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(s::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(s::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Vector-Field-1","page":"Methods","title":"Vector Field","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"vector_field","category":"page"},{"location":"lib/methods/#MathematicalSystems.vector_field","page":"Methods","title":"MathematicalSystems.vector_field","text":"vector_field(system::ContinuousIdentitySystem, x::AbstractVector)\n\nReturn the vector field state of a ContinuousIdentitySystem.\n\nInput\n\nsystem – ContinuousIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of a ConstrainedContinuousIdentitySystem.\n\nInput\n\nsystem – ConstrainedContinuousIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization-1","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods-1","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{#s7} where #s7<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.8/siteinfo.js b/v0.11.8/siteinfo.js new file mode 100644 index 00000000..2c43c243 --- /dev/null +++ b/v0.11.8/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.8"; diff --git a/v0.11.9/about/index.html b/v0.11.9/about/index.html new file mode 100644 index 00000000..760f1275 --- /dev/null +++ b/v0.11.9/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                  About

                                  This page contains some general information about this project, and recommendations about contributing.

                                  Contributing

                                  If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                  Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                  Branches and pull requests (PR)

                                  We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                  Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                  Unit testing and continuous integration (CI)

                                  This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                  When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                  $ julia --color=yes test/runtests.jl

                                  Alternatively, you can achieve the same from inside the REPL using the following command:

                                  julia> Pkg.test("MathematicalSystems")

                                  We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                  Contributing to the documentation

                                  New functions and types should be documented according to our guidelines directly in the source code.

                                  You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                  julia> ?LinearContinuousSystem

                                  This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                  To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                  $ julia --color=yes docs/make.jl

                                  Note that this also runs all doctests which will take some time.

                                  This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                  Below we list more related projects.

                                  Package nameDescription
                                  HybridSystems.jlHybrid Systems definitions in Julia.
                                  LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                  ControlToolbox.jlAnalysis and design tools for control systems.
                                  ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                  DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                  ControlSystems.jlA Control Systems Toolbox for Julia
                                  ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                  Credits

                                  These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                  diff --git a/v0.11.9/assets/documenter.js b/v0.11.9/assets/documenter.js new file mode 100644 index 00000000..22f0f9a0 --- /dev/null +++ b/v0.11.9/assets/documenter.js @@ -0,0 +1,260 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.10.3/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.10.3/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) { +$(document).ready(function() { + hljs.initHighlighting(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function() { + var settings = $('#documenter-settings'); + $('#documenter-settings-button').click(function(){ + settings.toggleClass('is-active'); + }); + // Close the dialog if X is clicked + $('#documenter-settings button.delete').click(function(){ + settings.removeClass('is-active'); + }); + // Close dialog if ESC is pressed + $(document).keyup(function(e) { + if (e.keyCode == 27) settings.removeClass('is-active'); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function() { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button") + sidebar_button.click(function(ev) { + ev.preventDefault(); + sidebar.toggleClass('visible'); + if (sidebar.hasClass('visible')) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind('click', function(ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + }); +}) + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function() { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css('max-width'), 10); + var L0 = e.width(); + if(L0 > L) { + var h0 = parseInt(e.css('font-size'), 10); + e.css('font-size', L * h0 / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on('orientationchange', resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function() { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if(typeof active !== 'undefined') { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +function set_theme(theme) { + var active = null; + var disabled = []; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + var themename = ss.ownerNode.getAttribute("data-theme-name"); + if(themename === null) continue; // ignore non-theme stylesheets + // Find the active theme + if(themename === theme) active = ss; + else disabled.push(ss); + } + if(active !== null) { + active.disabled = false; + if(active.ownerNode.getAttribute("data-theme-primary") === null) { + document.getElementsByTagName('html')[0].className = "theme--" + theme; + } else { + document.getElementsByTagName('html')[0].className = ""; + } + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + + // Store the theme in localStorage + if(typeof(window.localStorage) !== "undefined") { + window.localStorage.setItem("documenter-theme", theme); + } else { + console.error("Browser does not support window.localStorage"); + } +} + +// Theme picker setup +$(document).ready(function() { + // onchange callback + $('#documenter-themepicker').change(function themepick_callback(ev){ + var themename = $('#documenter-themepicker option:selected').attr('value'); + set_theme(themename); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if(typeof(window.localStorage) !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if(theme !== null) { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = (e.value === theme); + }) + } + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function() { + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/v0.11.9/assets/juliareach-light.css b/v0.11.9/assets/juliareach-light.css new file mode 100644 index 00000000..0fb5f544 --- /dev/null +++ b/v0.11.9/assets/juliareach-light.css @@ -0,0 +1,7615 @@ +@charset "UTF-8"; +/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ +@keyframes spinAround { + from { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } + +.delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + transform: rotate(-45deg); + transform-origin: center; + width: 0.625em; } + +.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .tabs:not(:last-child), .admonition:not(:last-child) { + margin-bottom: 1.5rem; } + +.delete, .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + pointer-events: auto; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; } + .delete::before, .modal-close::before, .delete::after, .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .delete::before, .modal-close::before { + height: 2px; + width: 50%; } + .delete::after, .modal-close::after { + height: 50%; + width: 2px; } + .delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); } + .delete:active, .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete, .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.delete, .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.delete, .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.is-overlay, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .modal, .modal-background, .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.button, .input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select, .file-cta, +.file-name, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; } + .button:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .file-cta:focus, + .file-name:focus, .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .is-focused.button, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta, + .is-focused.file-name, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .button:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .file-cta:active, + .file-name:active, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .is-active.button, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active, .is-active.file-cta, + .is-active.file-name, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis { + outline: none; } + .button[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled], + .file-name[disabled], .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], + fieldset[disabled] .button, + fieldset[disabled] .input, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] .textarea, + fieldset[disabled] .select select, + .select fieldset[disabled] select, + fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, + fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis { + cursor: not-allowed; } + +/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; } + +ul { + list-style: none; } + +button, +input, +select, +textarea { + margin: 0; } + +html { + box-sizing: border-box; } + +*, *::before, *::after { + box-sizing: inherit; } + +img, +embed, +iframe, +object, +video { + height: auto; + max-width: 100%; } + +audio { + max-width: 100%; } + +iframe { + border: 0; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + td:not([align]), + th:not([align]) { + text-align: left; } + +html { + background-color: white; + font-size: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; + text-align: justify;} + +article, +aside, +figure, +footer, +header, +hgroup, +section { + display: block; } + +body, +button, +input, +select, +textarea { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #222222; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + +a { + color: #2e63b8; + cursor: pointer; + text-decoration: none; } + a strong { + color: currentColor; } + a:hover { + color: #363636; } + +code { + background-color: rgba(0, 0, 0, 0.05); + color: #000000; + font-size: 0.875em; + font-weight: normal; + padding: 0.1em; } + +hr { + background-color: whitesmoke; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; } + +img { + height: auto; + max-width: 100%; } + +input[type="checkbox"], +input[type="radio"] { + vertical-align: baseline; } + +small { + font-size: 0.875em; } + +span { + font-style: inherit; + font-weight: inherit; } + +strong { + color: #222222; + font-weight: 700; } + +fieldset { + border: none; } + +pre { + -webkit-overflow-scrolling: touch; + background-color: whitesmoke; + color: #222222; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; } + pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; } + +table td, +table th { + vertical-align: top; } + table td:not([align]), + table th:not([align]) { + text-align: left; } + +table th { + color: #222222; } + +.is-clearfix::after { + clear: both; + content: " "; + display: table; } + +.is-pulled-left { + float: left !important; } + +.is-pulled-right { + float: right !important; } + +.is-clipped { + overflow: hidden !important; } + +.is-size-1 { + font-size: 3rem !important; } + +.is-size-2 { + font-size: 2.5rem !important; } + +.is-size-3 { + font-size: 2rem !important; } + +.is-size-4 { + font-size: 1.5rem !important; } + +.is-size-5 { + font-size: 1.25rem !important; } + +.is-size-6 { + font-size: 1rem !important; } + +.is-size-7, .docstring > section > a.docs-sourcelink { + font-size: 0.75rem !important; } + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; } + .is-size-2-mobile { + font-size: 2.5rem !important; } + .is-size-3-mobile { + font-size: 2rem !important; } + .is-size-4-mobile { + font-size: 1.5rem !important; } + .is-size-5-mobile { + font-size: 1.25rem !important; } + .is-size-6-mobile { + font-size: 1rem !important; } + .is-size-7-mobile { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; } + .is-size-2-tablet { + font-size: 2.5rem !important; } + .is-size-3-tablet { + font-size: 2rem !important; } + .is-size-4-tablet { + font-size: 1.5rem !important; } + .is-size-5-tablet { + font-size: 1.25rem !important; } + .is-size-6-tablet { + font-size: 1rem !important; } + .is-size-7-tablet { + font-size: 0.75rem !important; } } + +@media screen and (max-width: 1055px) { + .is-size-1-touch { + font-size: 3rem !important; } + .is-size-2-touch { + font-size: 2.5rem !important; } + .is-size-3-touch { + font-size: 2rem !important; } + .is-size-4-touch { + font-size: 1.5rem !important; } + .is-size-5-touch { + font-size: 1.25rem !important; } + .is-size-6-touch { + font-size: 1rem !important; } + .is-size-7-touch { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1056px) { + .is-size-1-desktop { + font-size: 3rem !important; } + .is-size-2-desktop { + font-size: 2.5rem !important; } + .is-size-3-desktop { + font-size: 2rem !important; } + .is-size-4-desktop { + font-size: 1.5rem !important; } + .is-size-5-desktop { + font-size: 1.25rem !important; } + .is-size-6-desktop { + font-size: 1rem !important; } + .is-size-7-desktop { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1216px) { + .is-size-1-widescreen { + font-size: 3rem !important; } + .is-size-2-widescreen { + font-size: 2.5rem !important; } + .is-size-3-widescreen { + font-size: 2rem !important; } + .is-size-4-widescreen { + font-size: 1.5rem !important; } + .is-size-5-widescreen { + font-size: 1.25rem !important; } + .is-size-6-widescreen { + font-size: 1rem !important; } + .is-size-7-widescreen { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1408px) { + .is-size-1-fullhd { + font-size: 3rem !important; } + .is-size-2-fullhd { + font-size: 2.5rem !important; } + .is-size-3-fullhd { + font-size: 2rem !important; } + .is-size-4-fullhd { + font-size: 1.5rem !important; } + .is-size-5-fullhd { + font-size: 1.25rem !important; } + .is-size-6-fullhd { + font-size: 1rem !important; } + .is-size-7-fullhd { + font-size: 0.75rem !important; } } + +.has-text-centered { + text-align: center !important; } + +.has-text-justified { + text-align: justify !important; } + +.has-text-left { + text-align: left !important; } + +.has-text-right { + text-align: right !important; } + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; } } + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-centered-tablet-only { + text-align: center !important; } } + +@media screen and (max-width: 1055px) { + .has-text-centered-touch { + text-align: center !important; } } + +@media screen and (min-width: 1056px) { + .has-text-centered-desktop { + text-align: center !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-centered-desktop-only { + text-align: center !important; } } + +@media screen and (min-width: 1216px) { + .has-text-centered-widescreen { + text-align: center !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-centered-widescreen-only { + text-align: center !important; } } + +@media screen and (min-width: 1408px) { + .has-text-centered-fullhd { + text-align: center !important; } } + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; } } + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-justified-tablet-only { + text-align: justify !important; } } + +@media screen and (max-width: 1055px) { + .has-text-justified-touch { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) { + .has-text-justified-desktop { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-justified-desktop-only { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) { + .has-text-justified-widescreen { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-justified-widescreen-only { + text-align: justify !important; } } + +@media screen and (min-width: 1408px) { + .has-text-justified-fullhd { + text-align: justify !important; } } + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; } } + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-left-tablet-only { + text-align: left !important; } } + +@media screen and (max-width: 1055px) { + .has-text-left-touch { + text-align: left !important; } } + +@media screen and (min-width: 1056px) { + .has-text-left-desktop { + text-align: left !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-left-desktop-only { + text-align: left !important; } } + +@media screen and (min-width: 1216px) { + .has-text-left-widescreen { + text-align: left !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-left-widescreen-only { + text-align: left !important; } } + +@media screen and (min-width: 1408px) { + .has-text-left-fullhd { + text-align: left !important; } } + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; } } + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-right-tablet-only { + text-align: right !important; } } + +@media screen and (max-width: 1055px) { + .has-text-right-touch { + text-align: right !important; } } + +@media screen and (min-width: 1056px) { + .has-text-right-desktop { + text-align: right !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-right-desktop-only { + text-align: right !important; } } + +@media screen and (min-width: 1216px) { + .has-text-right-widescreen { + text-align: right !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-right-widescreen-only { + text-align: right !important; } } + +@media screen and (min-width: 1408px) { + .has-text-right-fullhd { + text-align: right !important; } } + +.is-capitalized { + text-transform: capitalize !important; } + +.is-lowercase { + text-transform: lowercase !important; } + +.is-uppercase { + text-transform: uppercase !important; } + +.is-italic { + font-style: italic !important; } + +.has-text-white { + color: white !important; } + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; } + +.has-background-white { + background-color: white !important; } + +.has-text-black { + color: #0a0a0a !important; } + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; } + +.has-background-black { + background-color: #0a0a0a !important; } + +.has-text-light { + color: whitesmoke !important; } + +a.has-text-light:hover, a.has-text-light:focus { + color: #dbdbdb !important; } + +.has-background-light { + background-color: whitesmoke !important; } + +.has-text-dark { + color: #363636 !important; } + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #1c1c1c !important; } + +.has-background-dark { + background-color: #363636 !important; } + +.has-text-primary { + color: #4eb5de !important; } + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #27a1d2 !important; } + +.has-background-primary { + background-color: #4eb5de !important; } + +.has-text-link { + color: #2e63b8 !important; } + +a.has-text-link:hover, a.has-text-link:focus { + color: #244d8f !important; } + +.has-background-link { + background-color: #2e63b8 !important; } + +.has-text-info { + color: #209cee !important; } + +a.has-text-info:hover, a.has-text-info:focus { + color: #0f81cc !important; } + +.has-background-info { + background-color: #209cee !important; } + +.has-text-success { + color: #22c35b !important; } + +a.has-text-success:hover, a.has-text-success:focus { + color: #1a9847 !important; } + +.has-background-success { + background-color: #22c35b !important; } + +.has-text-warning { + color: #ffdd57 !important; } + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #ffd324 !important; } + +.has-background-warning { + background-color: #ffdd57 !important; } + +.has-text-danger { + color: #da0b00 !important; } + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #a70800 !important; } + +.has-background-danger { + background-color: #da0b00 !important; } + +.has-text-black-bis { + color: #121212 !important; } + +.has-background-black-bis { + background-color: #121212 !important; } + +.has-text-black-ter { + color: #242424 !important; } + +.has-background-black-ter { + background-color: #242424 !important; } + +.has-text-grey-darker { + color: #363636 !important; } + +.has-background-grey-darker { + background-color: #363636 !important; } + +.has-text-grey-dark { + color: #4a4a4a !important; } + +.has-background-grey-dark { + background-color: #4a4a4a !important; } + +.has-text-grey { + color: #7a7a7a !important; } + +.has-background-grey { + background-color: #7a7a7a !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: whitesmoke !important; } + +.has-background-white-ter { + background-color: whitesmoke !important; } + +.has-text-white-bis { + color: #fafafa !important; } + +.has-background-white-bis { + background-color: #fafafa !important; } + +.has-text-weight-light { + font-weight: 300 !important; } + +.has-text-weight-normal { + font-weight: 400 !important; } + +.has-text-weight-medium { + font-weight: 500 !important; } + +.has-text-weight-semibold { + font-weight: 600 !important; } + +.has-text-weight-bold { + font-weight: 700 !important; } + +.is-family-primary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.is-marginless { + margin: 0 !important; } + +.is-paddingless { + padding: 0 !important; } + +.is-radiusless { + border-radius: 0 !important; } + +.is-shadowless { + box-shadow: none !important; } + +.is-relative { + position: relative !important; } + +.box { + background-color: white; + border-radius: 6px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #222222; + display: block; + padding: 1.25rem; } + +a.box:hover, a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #2e63b8; } + +a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #2e63b8; } + +.button { + background-color: white; + border-color: #dbdbdb; + border-width: 1px; + color: #363636; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; } + .button strong { + color: inherit; } + .button .icon, .button .icon.is-small, .button #documenter .docs-sidebar form.docs-search > input.icon, #documenter .docs-sidebar .button form.docs-search > input.icon, .button .icon.is-medium, .button .icon.is-large { + height: 1.5em; + width: 1.5em; } + .button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; } + .button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); } + .button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); } + .button:hover, .button.is-hovered { + border-color: #b5b5b5; + color: #363636; } + .button:focus, .button.is-focused { + border-color: #2e63b8; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #222222; + text-decoration: underline; } + .button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { + background-color: whitesmoke; + color: #222222; } + .button.is-text:active, .button.is-text.is-active { + background-color: #e8e8e8; + color: #222222; } + .button.is-text[disabled], + fieldset[disabled] .button.is-text { + background-color: transparent; + border-color: transparent; + box-shadow: none; } + .button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:hover, .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus, .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .button.is-white:active, .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .button.is-white[disabled], + fieldset[disabled] .button.is-white { + background-color: white; + border-color: transparent; + box-shadow: none; } + .button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered { + background-color: black; } + .button.is-white.is-inverted[disabled], + fieldset[disabled] .button.is-white.is-inverted { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; } + .button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused { + background-color: white; + border-color: white; + color: #0a0a0a; } + .button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined[disabled], + fieldset[disabled] .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .button.is-black:hover, .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; } + .button.is-black:focus, .button.is-black.is-focused { + border-color: transparent; + color: white; } + .button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .button.is-black:active, .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; } + .button.is-black[disabled], + fieldset[disabled] .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; } + .button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-black.is-inverted[disabled], + fieldset[disabled] .button.is-black.is-inverted { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined[disabled], + fieldset[disabled] .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-light { + background-color: whitesmoke; + border-color: transparent; + color: #363636; } + .button.is-light:hover, .button.is-light.is-hovered { + background-color: #eeeeee; + border-color: transparent; + color: #363636; } + .button.is-light:focus, .button.is-light.is-focused { + border-color: transparent; + color: #363636; } + .button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .button.is-light:active, .button.is-light.is-active { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; } + .button.is-light[disabled], + fieldset[disabled] .button.is-light { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; } + .button.is-light.is-inverted { + background-color: #363636; + color: whitesmoke; } + .button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered { + background-color: #292929; } + .button.is-light.is-inverted[disabled], + fieldset[disabled] .button.is-light.is-inverted { + background-color: #363636; + border-color: transparent; + box-shadow: none; + color: whitesmoke; } + .button.is-light.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; } + .button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-light.is-outlined[disabled], + fieldset[disabled] .button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; } + .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; } + .button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused { + background-color: #363636; + color: whitesmoke; } + .button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-light.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; } + .button.is-dark, .content kbd.button { + background-color: #363636; + border-color: transparent; + color: whitesmoke; } + .button.is-dark:hover, .content kbd.button:hover, .button.is-dark.is-hovered, .content kbd.button.is-hovered { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; } + .button.is-dark:focus, .content kbd.button:focus, .button.is-dark.is-focused, .content kbd.button.is-focused { + border-color: transparent; + color: whitesmoke; } + .button.is-dark:focus:not(:active), .content kbd.button:focus:not(:active), .button.is-dark.is-focused:not(:active), .content kbd.button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .button.is-dark:active, .content kbd.button:active, .button.is-dark.is-active, .content kbd.button.is-active { + background-color: #292929; + border-color: transparent; + color: whitesmoke; } + .button.is-dark[disabled], .content kbd.button[disabled], + fieldset[disabled] .button.is-dark, + fieldset[disabled] .content kbd.button, + .content fieldset[disabled] kbd.button { + background-color: #363636; + border-color: transparent; + box-shadow: none; } + .button.is-dark.is-inverted, .content kbd.button.is-inverted { + background-color: whitesmoke; + color: #363636; } + .button.is-dark.is-inverted:hover, .content kbd.button.is-inverted:hover, .button.is-dark.is-inverted.is-hovered, .content kbd.button.is-inverted.is-hovered { + background-color: #e8e8e8; } + .button.is-dark.is-inverted[disabled], .content kbd.button.is-inverted[disabled], + fieldset[disabled] .button.is-dark.is-inverted, + fieldset[disabled] .content kbd.button.is-inverted, + .content fieldset[disabled] kbd.button.is-inverted { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; + color: #363636; } + .button.is-dark.is-loading::after, .content kbd.button.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-dark.is-outlined, .content kbd.button.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; } + .button.is-dark.is-outlined:hover, .content kbd.button.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .content kbd.button.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .content kbd.button.is-outlined:focus, .button.is-dark.is-outlined.is-focused, .content kbd.button.is-outlined.is-focused { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .button.is-dark.is-outlined.is-loading::after, .content kbd.button.is-outlined.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-dark.is-outlined.is-loading:hover::after, .content kbd.button.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .content kbd.button.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after, .content kbd.button.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-dark.is-outlined[disabled], .content kbd.button.is-outlined[disabled], + fieldset[disabled] .button.is-dark.is-outlined, + fieldset[disabled] .content kbd.button.is-outlined, + .content fieldset[disabled] kbd.button.is-outlined { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; } + .button.is-dark.is-inverted.is-outlined, .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; } + .button.is-dark.is-inverted.is-outlined:hover, .content kbd.button.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .content kbd.button.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .content kbd.button.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused, .content kbd.button.is-inverted.is-outlined.is-focused { + background-color: whitesmoke; + color: #363636; } + .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-dark.is-inverted.is-outlined[disabled], .content kbd.button.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-dark.is-inverted.is-outlined, + fieldset[disabled] .content kbd.button.is-inverted.is-outlined, + .content fieldset[disabled] kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; } + .button.is-primary, .docstring > section > a.button.docs-sourcelink { + background-color: #4eb5de; + border-color: transparent; + color: #fff; } + .button.is-primary:hover, .docstring > section > a.button.docs-sourcelink:hover, .button.is-primary.is-hovered, .docstring > section > a.button.is-hovered.docs-sourcelink { + background-color: #43b1dc; + border-color: transparent; + color: #fff; } + .button.is-primary:focus, .docstring > section > a.button.docs-sourcelink:focus, .button.is-primary.is-focused, .docstring > section > a.button.is-focused.docs-sourcelink { + border-color: transparent; + color: #fff; } + .button.is-primary:focus:not(:active), .docstring > section > a.button.docs-sourcelink:focus:not(:active), .button.is-primary.is-focused:not(:active), .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .button.is-primary:active, .docstring > section > a.button.docs-sourcelink:active, .button.is-primary.is-active, .docstring > section > a.button.is-active.docs-sourcelink { + background-color: #39acda; + border-color: transparent; + color: #fff; } + .button.is-primary[disabled], .docstring > section > a.button.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary, + fieldset[disabled] .docstring > section > a.button.docs-sourcelink { + background-color: #4eb5de; + border-color: transparent; + box-shadow: none; } + .button.is-primary.is-inverted, .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + color: #4eb5de; } + .button.is-primary.is-inverted:hover, .docstring > section > a.button.is-inverted.docs-sourcelink:hover, .button.is-primary.is-inverted.is-hovered, .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { + background-color: #f2f2f2; } + .button.is-primary.is-inverted[disabled], .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-inverted, + fieldset[disabled] .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #4eb5de; } + .button.is-primary.is-loading::after, .docstring > section > a.button.is-loading.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined, .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #4eb5de; + color: #4eb5de; } + .button.is-primary.is-outlined:hover, .docstring > section > a.button.is-outlined.docs-sourcelink:hover, .button.is-primary.is-outlined.is-hovered, .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-outlined:focus, .docstring > section > a.button.is-outlined.docs-sourcelink:focus, .button.is-primary.is-outlined.is-focused, .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { + background-color: #4eb5de; + border-color: #4eb5de; + color: #fff; } + .button.is-primary.is-outlined.is-loading::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { + border-color: transparent transparent #4eb5de #4eb5de !important; } + .button.is-primary.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined[disabled], .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-outlined, + fieldset[disabled] .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #4eb5de; + box-shadow: none; + color: #4eb5de; } + .button.is-primary.is-inverted.is-outlined, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-primary.is-inverted.is-outlined:hover, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-inverted.is-outlined:focus, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, .button.is-primary.is-inverted.is-outlined.is-focused, .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { + background-color: #fff; + color: #4eb5de; } + .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #4eb5de #4eb5de !important; } + .button.is-primary.is-inverted.is-outlined[disabled], .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-inverted.is-outlined, + fieldset[disabled] .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-link { + background-color: #2e63b8; + border-color: transparent; + color: #fff; } + .button.is-link:hover, .button.is-link.is-hovered { + background-color: #2b5eae; + border-color: transparent; + color: #fff; } + .button.is-link:focus, .button.is-link.is-focused { + border-color: transparent; + color: #fff; } + .button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button.is-link:active, .button.is-link.is-active { + background-color: #2958a4; + border-color: transparent; + color: #fff; } + .button.is-link[disabled], + fieldset[disabled] .button.is-link { + background-color: #2e63b8; + border-color: transparent; + box-shadow: none; } + .button.is-link.is-inverted { + background-color: #fff; + color: #2e63b8; } + .button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-link.is-inverted[disabled], + fieldset[disabled] .button.is-link.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #2e63b8; } + .button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined { + background-color: transparent; + border-color: #2e63b8; + color: #2e63b8; } + .button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + .button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #2e63b8 #2e63b8 !important; } + .button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined[disabled], + fieldset[disabled] .button.is-link.is-outlined { + background-color: transparent; + border-color: #2e63b8; + box-shadow: none; + color: #2e63b8; } + .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #2e63b8; } + .button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #2e63b8 #2e63b8 !important; } + .button.is-link.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-info { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .button.is-info:hover, .button.is-info.is-hovered { + background-color: #1496ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #118fe4; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], + fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: transparent; + box-shadow: none; } + .button.is-info.is-inverted { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-info.is-inverted[disabled], + fieldset[disabled] .button.is-info.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #209cee; } + .button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + color: #209cee; } + .button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined[disabled], + fieldset[disabled] .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + box-shadow: none; + color: #209cee; } + .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-success { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .button.is-success:hover, .button.is-success.is-hovered { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .button.is-success:focus, .button.is-success.is-focused { + border-color: transparent; + color: #fff; } + .button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .button.is-success:active, .button.is-success.is-active { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .button.is-success[disabled], + fieldset[disabled] .button.is-success { + background-color: #22c35b; + border-color: transparent; + box-shadow: none; } + .button.is-success.is-inverted { + background-color: #fff; + color: #22c35b; } + .button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-success.is-inverted[disabled], + fieldset[disabled] .button.is-success.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #22c35b; } + .button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined { + background-color: transparent; + border-color: #22c35b; + color: #22c35b; } + .button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused { + background-color: #22c35b; + border-color: #22c35b; + color: #fff; } + .button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #22c35b #22c35b !important; } + .button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined[disabled], + fieldset[disabled] .button.is-success.is-outlined { + background-color: transparent; + border-color: #22c35b; + box-shadow: none; + color: #22c35b; } + .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #22c35b; } + .button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #22c35b #22c35b !important; } + .button.is-success.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-warning { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:hover, .button.is-warning.is-hovered { + background-color: #ffdb4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83d; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], + fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: transparent; + box-shadow: none; } + .button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered { + background-color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-inverted[disabled], + fieldset[disabled] .button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + border-color: transparent; + box-shadow: none; + color: #ffdd57; } + .button.is-warning.is-loading::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } + .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + color: #ffdd57; } + .button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; } + .button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } + .button.is-warning.is-outlined[disabled], + fieldset[disabled] .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + box-shadow: none; + color: #ffdd57; } + .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; } + .button.is-warning.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + box-shadow: none; + color: rgba(0, 0, 0, 0.7); } + .button.is-danger { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .button.is-danger:hover, .button.is-danger.is-hovered { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .button.is-danger:focus, .button.is-danger.is-focused { + border-color: transparent; + color: #fff; } + .button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .button.is-danger:active, .button.is-danger.is-active { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .button.is-danger[disabled], + fieldset[disabled] .button.is-danger { + background-color: #da0b00; + border-color: transparent; + box-shadow: none; } + .button.is-danger.is-inverted { + background-color: #fff; + color: #da0b00; } + .button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-danger.is-inverted[disabled], + fieldset[disabled] .button.is-danger.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #da0b00; } + .button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined { + background-color: transparent; + border-color: #da0b00; + color: #da0b00; } + .button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused { + background-color: #da0b00; + border-color: #da0b00; + color: #fff; } + .button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #da0b00 #da0b00 !important; } + .button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined[disabled], + fieldset[disabled] .button.is-danger.is-outlined { + background-color: transparent; + border-color: #da0b00; + box-shadow: none; + color: #da0b00; } + .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #da0b00; } + .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #da0b00 #da0b00 !important; } + .button.is-danger.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-small, #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 2px; + font-size: 0.75rem; } + .button.is-normal { + font-size: 1rem; } + .button.is-medium { + font-size: 1.25rem; } + .button.is-large { + font-size: 1.5rem; } + .button[disabled], + fieldset[disabled] .button { + background-color: white; + border-color: #dbdbdb; + box-shadow: none; + opacity: 0.5; } + .button.is-fullwidth { + display: flex; + width: 100%; } + .button.is-loading { + color: transparent !important; + pointer-events: none; } + .button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; } + .button.is-static { + background-color: whitesmoke; + border-color: #dbdbdb; + color: #7a7a7a; + box-shadow: none; + pointer-events: none; } + .button.is-rounded, #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .buttons .button { + margin-bottom: 0.5rem; } + .buttons .button:not(:last-child):not(.is-fullwidth) { + margin-right: 0.5rem; } + .buttons:last-child { + margin-bottom: -0.5rem; } + .buttons:not(:last-child) { + margin-bottom: 1rem; } + .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { + border-radius: 2px; + font-size: 0.75rem; } + .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { + font-size: 1.25rem; } + .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { + font-size: 1.5rem; } + .buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; } + .buttons.has-addons .button:last-child { + margin-right: 0; } + .buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { + z-index: 2; } + .buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { + z-index: 3; } + .buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { + z-index: 4; } + .buttons.has-addons .button.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .buttons.is-centered { + justify-content: center; } + .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + .buttons.is-right { + justify-content: flex-end; } + .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + +.container { + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; } + @media screen and (min-width: 1056px) { + .container { + max-width: 992px; } + .container.is-fluid { + margin-left: 32px; + margin-right: 32px; + max-width: none; } } + @media screen and (max-width: 1215px) { + .container.is-widescreen { + max-width: 1152px; } } + @media screen and (max-width: 1407px) { + .container.is-fullhd { + max-width: 1344px; } } + @media screen and (min-width: 1216px) { + .container { + max-width: 1152px; } } + @media screen and (min-width: 1408px) { + .container { + max-width: 1344px; } } + +.content li + li { + margin-top: 0.25em; } + +.content p:not(:last-child), +.content dl:not(:last-child), +.content ol:not(:last-child), +.content ul:not(:last-child), +.content blockquote:not(:last-child), +.content pre:not(:last-child), +.content table:not(:last-child) { + margin-bottom: 1em; } + +.content h1, +.content h2, +.content h3, +.content h4, +.content h5, +.content h6 { + color: #222222; + font-weight: 600; + line-height: 1.125; } + +.content h1 { + font-size: 2em; + margin-bottom: 0.5em; } + .content h1:not(:first-child) { + margin-top: 1em; } + +.content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; } + .content h2:not(:first-child) { + margin-top: 1.1428em; } + +.content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; } + .content h3:not(:first-child) { + margin-top: 1.3333em; } + +.content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; } + +.content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; } + +.content h6 { + font-size: 1em; + margin-bottom: 1em; } + +.content blockquote { + background-color: whitesmoke; + border-left: 5px solid #dbdbdb; + padding: 1.25em 1.5em; } + +.content ol { + list-style-position: outside; + margin-left: 2em; + margin-top: 1em; } + .content ol:not([type]) { + list-style-type: decimal; } + .content ol:not([type]).is-lower-alpha { + list-style-type: lower-alpha; } + .content ol:not([type]).is-lower-roman { + list-style-type: lower-roman; } + .content ol:not([type]).is-upper-alpha { + list-style-type: upper-alpha; } + .content ol:not([type]).is-upper-roman { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0.7rem 0.5rem; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #222222; } + .content table th:not([align]) { + text-align: left; } + .content table thead td, + .content table thead th { + border-width: 0 0 2px; + color: #222222; } + .content table tfoot td, + .content table tfoot th { + border-width: 2px 0 0; + color: #222222; } + .content table tbody tr:last-child td, + .content table tbody tr:last-child th { + border-bottom-width: 0; } + +.content .tabs li + li { + margin-top: 0; } + +.content.is-small, #documenter .docs-sidebar form.docs-search > input.content { + font-size: 0.75rem; } + +.content.is-medium { + font-size: 1.25rem; } + +.content.is-large { + font-size: 1.5rem; } + +.icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; } + .icon.is-small, #documenter .docs-sidebar form.docs-search > input.icon { + height: 1rem; + width: 1rem; } + .icon.is-medium { + height: 2rem; + width: 2rem; } + .icon.is-large { + height: 3rem; + width: 3rem; } + +.image, #documenter .docs-sidebar .docs-logo > img { + display: block; + position: relative; } + .image img, #documenter .docs-sidebar .docs-logo > img img { + display: block; + height: auto; + width: 100%; } + .image img.is-rounded, #documenter .docs-sidebar .docs-logo > img img.is-rounded { + border-radius: 290486px; } + .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, + .image.is-square .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, + .image.is-1by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, + .image.is-5by4 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, + .image.is-4by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, + .image.is-3by2 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, + .image.is-5by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, + .image.is-16by9 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, + .image.is-2by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, + .image.is-3by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, + .image.is-4by5 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, + .image.is-3by4 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, + .image.is-2by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, + .image.is-3by5 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, + .image.is-9by16 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, + .image.is-1by2 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, + .image.is-1by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { + height: 100%; + width: 100%; } + .image.is-square, #documenter .docs-sidebar .docs-logo > img.is-square, .image.is-1by1, #documenter .docs-sidebar .docs-logo > img.is-1by1 { + padding-top: 100%; } + .image.is-5by4, #documenter .docs-sidebar .docs-logo > img.is-5by4 { + padding-top: 80%; } + .image.is-4by3, #documenter .docs-sidebar .docs-logo > img.is-4by3 { + padding-top: 75%; } + .image.is-3by2, #documenter .docs-sidebar .docs-logo > img.is-3by2 { + padding-top: 66.6666%; } + .image.is-5by3, #documenter .docs-sidebar .docs-logo > img.is-5by3 { + padding-top: 60%; } + .image.is-16by9, #documenter .docs-sidebar .docs-logo > img.is-16by9 { + padding-top: 56.25%; } + .image.is-2by1, #documenter .docs-sidebar .docs-logo > img.is-2by1 { + padding-top: 50%; } + .image.is-3by1, #documenter .docs-sidebar .docs-logo > img.is-3by1 { + padding-top: 33.3333%; } + .image.is-4by5, #documenter .docs-sidebar .docs-logo > img.is-4by5 { + padding-top: 125%; } + .image.is-3by4, #documenter .docs-sidebar .docs-logo > img.is-3by4 { + padding-top: 133.3333%; } + .image.is-2by3, #documenter .docs-sidebar .docs-logo > img.is-2by3 { + padding-top: 150%; } + .image.is-3by5, #documenter .docs-sidebar .docs-logo > img.is-3by5 { + padding-top: 166.6666%; } + .image.is-9by16, #documenter .docs-sidebar .docs-logo > img.is-9by16 { + padding-top: 177.7777%; } + .image.is-1by2, #documenter .docs-sidebar .docs-logo > img.is-1by2 { + padding-top: 200%; } + .image.is-1by3, #documenter .docs-sidebar .docs-logo > img.is-1by3 { + padding-top: 300%; } + .image.is-16x16, #documenter .docs-sidebar .docs-logo > img.is-16x16 { + height: 16px; + width: 16px; } + .image.is-24x24, #documenter .docs-sidebar .docs-logo > img.is-24x24 { + height: 24px; + width: 24px; } + .image.is-32x32, #documenter .docs-sidebar .docs-logo > img.is-32x32 { + height: 32px; + width: 32px; } + .image.is-48x48, #documenter .docs-sidebar .docs-logo > img.is-48x48 { + height: 48px; + width: 48px; } + .image.is-64x64, #documenter .docs-sidebar .docs-logo > img.is-64x64 { + height: 64px; + width: 64px; } + .image.is-96x96, #documenter .docs-sidebar .docs-logo > img.is-96x96 { + height: 96px; + width: 96px; } + .image.is-128x128, #documenter .docs-sidebar .docs-logo > img.is-128x128 { + height: 128px; + width: 128px; } + +.notification { + background-color: whitesmoke; + border-radius: 4px; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; } + .notification a:not(.button):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .notification strong { + color: currentColor; } + .notification code, + .notification pre { + background: white; } + .notification pre code { + background: transparent; } + .notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; } + .notification .title, + .notification .subtitle, + .notification .content { + color: currentColor; } + .notification.is-white { + background-color: white; + color: #0a0a0a; } + .notification.is-black { + background-color: #0a0a0a; + color: white; } + .notification.is-light { + background-color: whitesmoke; + color: #363636; } + .notification.is-dark, .content kbd.notification { + background-color: #363636; + color: whitesmoke; } + .notification.is-primary, .docstring > section > a.notification.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .notification.is-link { + background-color: #2e63b8; + color: #fff; } + .notification.is-info { + background-color: #209cee; + color: #fff; } + .notification.is-success { + background-color: #22c35b; + color: #fff; } + .notification.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .notification.is-danger { + background-color: #da0b00; + color: #fff; } + +.progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 1rem; + overflow: hidden; + padding: 0; + width: 100%; } + .progress::-webkit-progress-bar { + background-color: #dbdbdb; } + .progress::-webkit-progress-value { + background-color: #222222; } + .progress::-moz-progress-bar { + background-color: #222222; } + .progress::-ms-fill { + background-color: #222222; + border: none; } + .progress.is-white::-webkit-progress-value { + background-color: white; } + .progress.is-white::-moz-progress-bar { + background-color: white; } + .progress.is-white::-ms-fill { + background-color: white; } + .progress.is-white:indeterminate { + background-image: linear-gradient(to right, white 30%, #dbdbdb 30%); } + .progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; } + .progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; } + .progress.is-black::-ms-fill { + background-color: #0a0a0a; } + .progress.is-black:indeterminate { + background-image: linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%); } + .progress.is-light::-webkit-progress-value { + background-color: whitesmoke; } + .progress.is-light::-moz-progress-bar { + background-color: whitesmoke; } + .progress.is-light::-ms-fill { + background-color: whitesmoke; } + .progress.is-light:indeterminate { + background-image: linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%); } + .progress.is-dark::-webkit-progress-value, .content kbd.progress::-webkit-progress-value { + background-color: #363636; } + .progress.is-dark::-moz-progress-bar, .content kbd.progress::-moz-progress-bar { + background-color: #363636; } + .progress.is-dark::-ms-fill, .content kbd.progress::-ms-fill { + background-color: #363636; } + .progress.is-dark:indeterminate, .content kbd.progress:indeterminate { + background-image: linear-gradient(to right, #363636 30%, #dbdbdb 30%); } + .progress.is-primary::-webkit-progress-value, .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { + background-color: #4eb5de; } + .progress.is-primary::-moz-progress-bar, .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { + background-color: #4eb5de; } + .progress.is-primary::-ms-fill, .docstring > section > a.progress.docs-sourcelink::-ms-fill { + background-color: #4eb5de; } + .progress.is-primary:indeterminate, .docstring > section > a.progress.docs-sourcelink:indeterminate { + background-image: linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%); } + .progress.is-link::-webkit-progress-value { + background-color: #2e63b8; } + .progress.is-link::-moz-progress-bar { + background-color: #2e63b8; } + .progress.is-link::-ms-fill { + background-color: #2e63b8; } + .progress.is-link:indeterminate { + background-image: linear-gradient(to right, #2e63b8 30%, #dbdbdb 30%); } + .progress.is-info::-webkit-progress-value { + background-color: #209cee; } + .progress.is-info::-moz-progress-bar { + background-color: #209cee; } + .progress.is-info::-ms-fill { + background-color: #209cee; } + .progress.is-info:indeterminate { + background-image: linear-gradient(to right, #209cee 30%, #dbdbdb 30%); } + .progress.is-success::-webkit-progress-value { + background-color: #22c35b; } + .progress.is-success::-moz-progress-bar { + background-color: #22c35b; } + .progress.is-success::-ms-fill { + background-color: #22c35b; } + .progress.is-success:indeterminate { + background-image: linear-gradient(to right, #22c35b 30%, #dbdbdb 30%); } + .progress.is-warning::-webkit-progress-value { + background-color: #ffdd57; } + .progress.is-warning::-moz-progress-bar { + background-color: #ffdd57; } + .progress.is-warning::-ms-fill { + background-color: #ffdd57; } + .progress.is-warning:indeterminate { + background-image: linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%); } + .progress.is-danger::-webkit-progress-value { + background-color: #da0b00; } + .progress.is-danger::-moz-progress-bar { + background-color: #da0b00; } + .progress.is-danger::-ms-fill { + background-color: #da0b00; } + .progress.is-danger:indeterminate { + background-image: linear-gradient(to right, #da0b00 30%, #dbdbdb 30%); } + .progress:indeterminate { + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-name: moveIndeterminate; + animation-timing-function: linear; + background-color: #dbdbdb; + background-image: linear-gradient(to right, #222222 30%, #dbdbdb 30%); + background-position: top left; + background-repeat: no-repeat; + background-size: 150% 150%; } + .progress:indeterminate::-webkit-progress-bar { + background-color: transparent; } + .progress:indeterminate::-moz-progress-bar { + background-color: transparent; } + .progress.is-small, #documenter .docs-sidebar form.docs-search > input.progress { + height: 0.75rem; } + .progress.is-medium { + height: 1.25rem; } + .progress.is-large { + height: 1.5rem; } + +@keyframes moveIndeterminate { + from { + background-position: 200% 0; } + to { + background-position: -200% 0; } } + +.table { + background-color: white; + color: #363636; } + .table td, + .table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .table td.is-white, + .table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; } + .table td.is-black, + .table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .table td.is-light, + .table th.is-light { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .table td.is-dark, + .table th.is-dark { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .table td.is-primary, + .table th.is-primary { + background-color: #4eb5de; + border-color: #4eb5de; + color: #fff; } + .table td.is-link, + .table th.is-link { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + .table td.is-info, + .table th.is-info { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .table td.is-success, + .table th.is-success { + background-color: #22c35b; + border-color: #22c35b; + color: #fff; } + .table td.is-warning, + .table th.is-warning { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .table td.is-danger, + .table th.is-danger { + background-color: #da0b00; + border-color: #da0b00; + color: #fff; } + .table td.is-narrow, + .table th.is-narrow { + white-space: nowrap; + width: 1%; } + .table td.is-selected, + .table th.is-selected { + background-color: #4eb5de; + color: #fff; } + .table td.is-selected a, + .table td.is-selected strong, + .table th.is-selected a, + .table th.is-selected strong { + color: currentColor; } + .table th { + color: #222222; } + .table th:not([align]) { + text-align: left; } + .table tr.is-selected { + background-color: #4eb5de; + color: #fff; } + .table tr.is-selected a, + .table tr.is-selected strong { + color: currentColor; } + .table tr.is-selected td, + .table tr.is-selected th { + border-color: #fff; + color: currentColor; } + .table thead { + background-color: transparent; } + .table thead td, + .table thead th { + border-width: 0 0 2px; + color: #222222; } + .table tfoot { + background-color: transparent; } + .table tfoot td, + .table tfoot th { + border-width: 2px 0 0; + color: #222222; } + .table tbody { + background-color: transparent; } + .table tbody tr:last-child td, + .table tbody tr:last-child th { + border-bottom-width: 0; } + .table.is-bordered td, + .table.is-bordered th { + border-width: 1px; } + .table.is-bordered tr:last-child td, + .table.is-bordered tr:last-child th { + border-bottom-width: 1px; } + .table.is-fullwidth { + width: 100%; } + .table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #fafafa; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: #fafafa; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { + background-color: whitesmoke; } + .table.is-narrow td, + .table.is-narrow th { + padding: 0.25em 0.5em; } + .table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #fafafa; } + +.table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; } + +.tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .tags .tag, .tags .docstring > section > a.docs-sourcelink, .tags .content kbd, .content .tags kbd { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child) { + margin-right: 0.5rem; } + .tags:last-child { + margin-bottom: -0.5rem; } + .tags:not(:last-child) { + margin-bottom: 1rem; } + .tags.are-medium .tag:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), .tags.are-medium .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .docstring > section > a.docs-sourcelink, .tags.is-centered .content kbd, .content .tags.is-centered kbd { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .docstring > section > a.docs-sourcelink, .tags.has-addons .content kbd, .content .tags.has-addons kbd { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body) { + align-items: center; + background-color: whitesmoke; + border-radius: 4px; + color: #222222; + display: inline-flex; + font-size: 0.75rem; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + .tag:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete, .content kbd:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag:not(body).is-white, .docstring > section > a.docs-sourcelink:not(body).is-white, .content kbd:not(body).is-white { + background-color: white; + color: #0a0a0a; } + .tag:not(body).is-black, .docstring > section > a.docs-sourcelink:not(body).is-black, .content kbd:not(body).is-black { + background-color: #0a0a0a; + color: white; } + .tag:not(body).is-light, .docstring > section > a.docs-sourcelink:not(body).is-light, .content kbd:not(body).is-light { + background-color: whitesmoke; + color: #363636; } + .tag:not(body).is-dark, .docstring > section > a.docs-sourcelink:not(body).is-dark, .content kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag:not(body).is-primary, .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body).is-primary { + background-color: #4eb5de; + color: #fff; } + .tag:not(body).is-link, .docstring > section > a.docs-sourcelink:not(body).is-link, .content kbd:not(body).is-link { + background-color: #2e63b8; + color: #fff; } + .tag:not(body).is-info, .docstring > section > a.docs-sourcelink:not(body).is-info, .content kbd:not(body).is-info { + background-color: #209cee; + color: #fff; } + .tag:not(body).is-success, .docstring > section > a.docs-sourcelink:not(body).is-success, .content kbd:not(body).is-success { + background-color: #22c35b; + color: #fff; } + .tag:not(body).is-warning, .docstring > section > a.docs-sourcelink:not(body).is-warning, .content kbd:not(body).is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag:not(body).is-danger, .docstring > section > a.docs-sourcelink:not(body).is-danger, .content kbd:not(body).is-danger { + background-color: #da0b00; + color: #fff; } + .tag:not(body).is-normal, .docstring > section > a.docs-sourcelink:not(body).is-normal, .content kbd:not(body).is-normal { + font-size: 0.75rem; } + .tag:not(body).is-medium, .docstring > section > a.docs-sourcelink:not(body).is-medium, .content kbd:not(body).is-medium { + font-size: 1rem; } + .tag:not(body).is-large, .docstring > section > a.docs-sourcelink:not(body).is-large, .content kbd:not(body).is-large { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag:not(body).is-delete, .docstring > section > a.docs-sourcelink:not(body).is-delete, .content kbd:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before, .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before { + height: 1px; + width: 50%; } + .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { + height: 50%; + width: 1px; } + .tag:not(body).is-delete:hover, .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, .content kbd:not(body).is-delete:hover, .tag:not(body).is-delete:focus, .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, .content kbd:not(body).is-delete:focus { + background-color: #e8e8e8; } + .tag:not(body).is-delete:active, .docstring > section > a.docs-sourcelink:not(body).is-delete:active, .content kbd:not(body).is-delete:active { + background-color: #dbdbdb; } + .tag:not(body).is-rounded, .docstring > section > a.docs-sourcelink:not(body).is-rounded, .content kbd:not(body).is-rounded, #documenter .docs-sidebar form.docs-search > input.tag:not(body) { + border-radius: 290486px; } + +a.tag:hover, .docstring > section > a.docs-sourcelink:hover { + text-decoration: underline; } + +.title, +.subtitle { + word-break: break-word; } + .title em, + .title span, + .subtitle em, + .subtitle span { + font-weight: inherit; } + .title sub, + .subtitle sub { + font-size: 0.75em; } + .title sup, + .subtitle sup { + font-size: 0.75em; } + .title .tag, .title .docstring > section > a.docs-sourcelink, .title .content kbd, .content .title kbd, + .subtitle .tag, + .subtitle .docstring > section > a.docs-sourcelink, + .subtitle .content kbd, + .content .subtitle kbd { + vertical-align: middle; } + +.title { + color: #363636; + font-size: 2rem; + font-weight: 600; + line-height: 1.125; } + .title strong { + color: inherit; + font-weight: inherit; } + .title + .highlight { + margin-top: -0.75rem; } + .title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; } + .title.is-1 { + font-size: 3rem; } + .title.is-2 { + font-size: 2.5rem; } + .title.is-3 { + font-size: 2rem; } + .title.is-4 { + font-size: 1.5rem; } + .title.is-5 { + font-size: 1.25rem; } + .title.is-6 { + font-size: 1rem; } + .title.is-7 { + font-size: 0.75rem; } + +.subtitle { + color: #4a4a4a; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; } + .subtitle strong { + color: #363636; + font-weight: 600; } + .subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; } + .subtitle.is-1 { + font-size: 3rem; } + .subtitle.is-2 { + font-size: 2.5rem; } + .subtitle.is-3 { + font-size: 2rem; } + .subtitle.is-4 { + font-size: 1.5rem; } + .subtitle.is-5 { + font-size: 1.25rem; } + .subtitle.is-6 { + font-size: 1rem; } + .subtitle.is-7 { + font-size: 0.75rem; } + +.heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; } + +.highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; } + .highlight pre { + overflow: auto; + max-width: 100%; } + +.number { + align-items: center; + background-color: whitesmoke; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; } + +.input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .textarea:hover, .select select:hover, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered, .is-hovered.textarea, .select select.is-hovered { + border-color: #b5b5b5; } + .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], + fieldset[disabled] .input, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] .textarea, + fieldset[disabled] .select select, + .select fieldset[disabled] select { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #7a7a7a; } + .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder, + fieldset[disabled] .input::-moz-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder, + fieldset[disabled] .textarea::-moz-placeholder, + fieldset[disabled] .select select::-moz-placeholder, + .select fieldset[disabled] select::-moz-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder, + fieldset[disabled] .input::-webkit-input-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder, + fieldset[disabled] .textarea::-webkit-input-placeholder, + fieldset[disabled] .select select::-webkit-input-placeholder, + .select fieldset[disabled] select::-webkit-input-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder, + fieldset[disabled] .input:-moz-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder, + fieldset[disabled] .textarea:-moz-placeholder, + fieldset[disabled] .select select:-moz-placeholder, + .select fieldset[disabled] select:-moz-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder, + fieldset[disabled] .input:-ms-input-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder, + fieldset[disabled] .textarea:-ms-input-placeholder, + fieldset[disabled] .select select:-ms-input-placeholder, + .select fieldset[disabled] select:-ms-input-placeholder { + color: rgba(122, 122, 122, 0.3); } + +.input, #documenter .docs-sidebar form.docs-search > input, .textarea { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly], .textarea[readonly] { + box-shadow: none; } + .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white, .is-white.textarea { + border-color: white; } + .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.textarea:focus, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, .is-white.is-focused.textarea, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.textarea:active, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-active, .is-white.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black, .is-black.textarea { + border-color: #0a0a0a; } + .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.textarea:focus, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, .is-black.is-focused.textarea, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.textarea:active, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-active, .is-black.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light, .is-light.textarea { + border-color: whitesmoke; } + .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.textarea:focus, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, .is-light.is-focused.textarea, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.textarea:active, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-active, .is-light.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.input, .content kbd.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .is-dark.textarea, .content kbd.textarea { + border-color: #363636; } + .is-dark.input:focus, .content kbd.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.is-focused.input, .content kbd.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.input:active, .content kbd.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.is-active.input, .content kbd.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, .is-dark.is-active.textarea, .content kbd.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.input, .docstring > section > a.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary, .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.input:focus, .docstring > section > a.input.docs-sourcelink:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.is-focused.input, .docstring > section > a.is-focused.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.input:active, .docstring > section > a.input.docs-sourcelink:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.is-active.input, .docstring > section > a.is-active.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link, .is-link.textarea { + border-color: #2e63b8; } + .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.textarea:focus, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, .is-link.is-focused.textarea, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.textarea:active, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-active, .is-link.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info, .is-info.textarea { + border-color: #209cee; } + .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.textarea:focus, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, .is-info.is-focused.textarea, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.textarea:active, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-active, .is-info.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success, .is-success.textarea { + border-color: #22c35b; } + .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.textarea:focus, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, .is-success.is-focused.textarea, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.textarea:active, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-active, .is-success.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning, .is-warning.textarea { + border-color: #ffdd57; } + .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, .is-warning.is-focused.textarea, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.textarea:active, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, .is-warning.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger, .is-danger.textarea { + border-color: #da0b00; } + .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, .is-danger.is-focused.textarea, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.textarea:active, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, .is-danger.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.input, #documenter .docs-sidebar form.docs-search > input, .is-small.textarea { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium, .is-medium.textarea { + font-size: 1.25rem; } + .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large, .is-large.textarea { + font-size: 1.5rem; } + .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth, .is-fullwidth.textarea { + display: block; + width: 100%; } + .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline, .is-inline.textarea { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.input.is-static, #documenter .docs-sidebar form.docs-search > input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; } + +.textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; } + .textarea:not([rows]) { + max-height: 600px; + min-height: 120px; } + .textarea[rows] { + height: initial; } + .textarea.has-fixed-size { + resize: none; } + +.checkbox, .radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .checkbox input, .radio input { + cursor: pointer; } + .checkbox:hover, .radio:hover { + color: #363636; } + .checkbox[disabled], .radio[disabled], + fieldset[disabled] .checkbox, + fieldset[disabled] .radio { + color: #7a7a7a; + cursor: not-allowed; } + +.radio + .radio { + margin-left: 0.5em; } + +.select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; } + .select:not(.is-multiple) { + height: 2.25em; } + .select:not(.is-multiple):not(.is-loading)::after { + border-color: #2e63b8; + right: 1.125em; + z-index: 4; } + .select.is-rounded select, #documenter .docs-sidebar form.docs-search > input.select select { + border-radius: 290486px; + padding-left: 1em; } + .select select { + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; } + .select select::-ms-expand { + display: none; } + .select select[disabled]:hover, + fieldset[disabled] .select select:hover { + border-color: whitesmoke; } + .select select:not([multiple]) { + padding-right: 2.5em; } + .select select[multiple] { + height: auto; + padding: 0; } + .select select[multiple] option { + padding: 0.5em 1em; } + .select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #363636; } + .select.is-white:not(:hover)::after { + border-color: white; } + .select.is-white select { + border-color: white; } + .select.is-white select:hover, .select.is-white select.is-hovered { + border-color: #f2f2f2; } + .select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .select.is-black:not(:hover)::after { + border-color: #0a0a0a; } + .select.is-black select { + border-color: #0a0a0a; } + .select.is-black select:hover, .select.is-black select.is-hovered { + border-color: black; } + .select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .select.is-light:not(:hover)::after { + border-color: whitesmoke; } + .select.is-light select { + border-color: whitesmoke; } + .select.is-light select:hover, .select.is-light select.is-hovered { + border-color: #e8e8e8; } + .select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .select.is-dark:not(:hover)::after, .content kbd.select:not(:hover)::after { + border-color: #363636; } + .select.is-dark select, .content kbd.select select { + border-color: #363636; } + .select.is-dark select:hover, .content kbd.select select:hover, .select.is-dark select.is-hovered, .content kbd.select select.is-hovered { + border-color: #292929; } + .select.is-dark select:focus, .content kbd.select select:focus, .select.is-dark select.is-focused, .content kbd.select select.is-focused, .select.is-dark select:active, .content kbd.select select:active, .select.is-dark select.is-active, .content kbd.select select.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .select.is-primary:not(:hover)::after, .docstring > section > a.select.docs-sourcelink:not(:hover)::after { + border-color: #4eb5de; } + .select.is-primary select, .docstring > section > a.select.docs-sourcelink select { + border-color: #4eb5de; } + .select.is-primary select:hover, .docstring > section > a.select.docs-sourcelink select:hover, .select.is-primary select.is-hovered, .docstring > section > a.select.docs-sourcelink select.is-hovered { + border-color: #39acda; } + .select.is-primary select:focus, .docstring > section > a.select.docs-sourcelink select:focus, .select.is-primary select.is-focused, .docstring > section > a.select.docs-sourcelink select.is-focused, .select.is-primary select:active, .docstring > section > a.select.docs-sourcelink select:active, .select.is-primary select.is-active, .docstring > section > a.select.docs-sourcelink select.is-active { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .select.is-link:not(:hover)::after { + border-color: #2e63b8; } + .select.is-link select { + border-color: #2e63b8; } + .select.is-link select:hover, .select.is-link select.is-hovered { + border-color: #2958a4; } + .select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select.is-info:not(:hover)::after { + border-color: #209cee; } + .select.is-info select { + border-color: #209cee; } + .select.is-info select:hover, .select.is-info select.is-hovered { + border-color: #118fe4; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83d; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #7a7a7a; } + .select.is-fullwidth { + width: 100%; } + .select.is-fullwidth select { + width: 100%; } + .select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + transform: none; } + .select.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { + font-size: 0.75rem; } + .select.is-loading.is-medium:after { + font-size: 1.25rem; } + .select.is-loading.is-large:after { + font-size: 1.5rem; } + +.file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; } + .file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; } + .file.is-white:active .file-cta, .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; } + .file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; } + .file.is-black:active .file-cta, .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; } + .file.is-light .file-cta { + background-color: whitesmoke; + border-color: transparent; + color: #363636; } + .file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { + background-color: #eeeeee; + border-color: transparent; + color: #363636; } + .file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); + color: #363636; } + .file.is-light:active .file-cta, .file.is-light.is-active .file-cta { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; } + .file.is-dark .file-cta, .content kbd.file .file-cta { + background-color: #363636; + border-color: transparent; + color: whitesmoke; } + .file.is-dark:hover .file-cta, .content kbd.file:hover .file-cta, .file.is-dark.is-hovered .file-cta, .content kbd.file.is-hovered .file-cta { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; } + .file.is-dark:focus .file-cta, .content kbd.file:focus .file-cta, .file.is-dark.is-focused .file-cta, .content kbd.file.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); + color: whitesmoke; } + .file.is-dark:active .file-cta, .content kbd.file:active .file-cta, .file.is-dark.is-active .file-cta, .content kbd.file.is-active .file-cta { + background-color: #292929; + border-color: transparent; + color: whitesmoke; } + .file.is-primary .file-cta, .docstring > section > a.file.docs-sourcelink .file-cta { + background-color: #4eb5de; + border-color: transparent; + color: #fff; } + .file.is-primary:hover .file-cta, .docstring > section > a.file.docs-sourcelink:hover .file-cta, .file.is-primary.is-hovered .file-cta, .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { + background-color: #43b1dc; + border-color: transparent; + color: #fff; } + .file.is-primary:focus .file-cta, .docstring > section > a.file.docs-sourcelink:focus .file-cta, .file.is-primary.is-focused .file-cta, .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(78, 181, 222, 0.25); + color: #fff; } + .file.is-primary:active .file-cta, .docstring > section > a.file.docs-sourcelink:active .file-cta, .file.is-primary.is-active .file-cta, .docstring > section > a.file.is-active.docs-sourcelink .file-cta { + background-color: #39acda; + border-color: transparent; + color: #fff; } + .file.is-link .file-cta { + background-color: #2e63b8; + border-color: transparent; + color: #fff; } + .file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { + background-color: #2b5eae; + border-color: transparent; + color: #fff; } + .file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(46, 99, 184, 0.25); + color: #fff; } + .file.is-link:active .file-cta, .file.is-link.is-active .file-cta { + background-color: #2958a4; + border-color: transparent; + color: #fff; } + .file.is-info .file-cta { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { + background-color: #1496ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #118fe4; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffdb4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83d; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 0.75rem; } + .file.is-medium { + font-size: 1.25rem; } + .file.is-medium .file-icon .fa { + font-size: 21px; } + .file.is-large { + font-size: 1.5rem; } + .file.is-large .file-icon .fa { + font-size: 28px; } + .file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .file.has-name.is-empty .file-cta { + border-radius: 4px; } + .file.has-name.is-empty .file-name { + display: none; } + .file.is-boxed .file-label { + flex-direction: column; } + .file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; } + .file.is-boxed .file-name { + border-width: 0 1px 1px; } + .file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; } + .file.is-boxed .file-icon .fa { + font-size: 21px; } + .file.is-boxed.is-small .file-icon .fa, #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { + font-size: 14px; } + .file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; } + .file.is-boxed.is-large .file-icon .fa { + font-size: 35px; } + .file.is-boxed.has-name .file-cta { + border-radius: 4px 4px 0 0; } + .file.is-boxed.has-name .file-name { + border-radius: 0 0 4px 4px; + border-width: 0 1px 1px; } + .file.is-centered { + justify-content: center; } + .file.is-fullwidth .file-label { + width: 100%; } + .file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; } + .file.is-right { + justify-content: flex-end; } + .file.is-right .file-cta { + border-radius: 0 4px 4px 0; } + .file.is-right .file-name { + border-radius: 4px 0 0 4px; + border-width: 1px 0 1px 1px; + order: -1; } + +.file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; } + .file-label:hover .file-cta { + background-color: #eeeeee; + color: #363636; } + .file-label:hover .file-name { + border-color: #d5d5d5; } + .file-label:active .file-cta { + background-color: #e8e8e8; + color: #363636; } + .file-label:active .file-name { + border-color: #cfcfcf; } + +.file-input { + height: 100%; + left: 0; + opacity: 0; + outline: none; + position: absolute; + top: 0; + width: 100%; } + +.file-cta, +.file-name { + border-color: #dbdbdb; + border-radius: 4px; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; } + +.file-cta { + background-color: whitesmoke; + color: #4a4a4a; } + +.file-name { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; } + +.file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; } + .file-icon .fa { + font-size: 14px; } + +.label { + color: #363636; + display: block; + font-size: 1rem; + font-weight: 700; } + .label:not(:last-child) { + margin-bottom: 0.5em; } + .label.is-small, #documenter .docs-sidebar form.docs-search > input.label { + font-size: 0.75rem; } + .label.is-medium { + font-size: 1.25rem; } + .label.is-large { + font-size: 1.5rem; } + +.help { + display: block; + font-size: 0.75rem; + margin-top: 0.25rem; } + .help.is-white { + color: white; } + .help.is-black { + color: #0a0a0a; } + .help.is-light { + color: whitesmoke; } + .help.is-dark, .content kbd.help { + color: #363636; } + .help.is-primary, .docstring > section > a.help.docs-sourcelink { + color: #4eb5de; } + .help.is-link { + color: #2e63b8; } + .help.is-info { + color: #209cee; } + .help.is-success { + color: #22c35b; } + .help.is-warning { + color: #ffdd57; } + .help.is-danger { + color: #da0b00; } + +.field:not(:last-child) { + margin-bottom: 0.75rem; } + +.field.has-addons { + display: flex; + justify-content: flex-start; } + .field.has-addons .control:not(:last-child) { + margin-right: -1px; } + .field.has-addons .control:not(:first-child):not(:last-child) .button, + .field.has-addons .control:not(:first-child):not(:last-child) .input, + .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, + .field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; } + .field.has-addons .control:first-child:not(:only-child) .button, + .field.has-addons .control:first-child:not(:only-child) .input, + .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, + .field.has-addons .control:first-child:not(:only-child) .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .field.has-addons .control:last-child:not(:only-child) .button, + .field.has-addons .control:last-child:not(:only-child) .input, + .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, + .field.has-addons .control:last-child:not(:only-child) .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]).is-hovered, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]).is-hovered { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input:not([disabled]).is-focused, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input:not([disabled]).is-active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select:not([disabled]).is-focused, + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select:not([disabled]).is-active { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input:not([disabled]).is-focused:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input:not([disabled]).is-active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select:not([disabled]).is-focused:hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select:not([disabled]).is-active:hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.is-grouped.is-grouped-centered { + justify-content: center; } + .field.is-grouped.is-grouped-right { + justify-content: flex-end; } + .field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; } + .field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; } + .field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; } + .field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field.is-horizontal { + display: flex; } } + +.field-label .label { + font-size: inherit; } + +@media screen and (max-width: 768px) { + .field-label { + margin-bottom: 0.5rem; } } + +@media screen and (min-width: 769px), print { + .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; } + .field-label.is-small, #documenter .docs-sidebar form.docs-search > input.field-label { + font-size: 0.75rem; + padding-top: 0.375em; } + .field-label.is-normal { + padding-top: 0.375em; } + .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; } + .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; } } + +.field-body .field .field { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; } + .field-body .field { + margin-bottom: 0; } + .field-body > .field { + flex-shrink: 1; } + .field-body > .field:not(.is-narrow) { + flex-grow: 1; } + .field-body > .field:not(:last-child) { + margin-right: 0.75rem; } } + +.control { + box-sizing: border-box; + clear: both; + font-size: 1rem; + position: relative; + text-align: left; } + .control.has-icons-left .input:focus ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, + .control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, + .control.has-icons-right .select:focus ~ .icon { + color: #7a7a7a; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, + .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon, + .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { + font-size: 0.75rem; } + .control.has-icons-left .input.is-medium ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, + .control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, + .control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; } + .control.has-icons-left .input.is-large ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, + .control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, + .control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; } + .control.has-icons-left .icon, .control.has-icons-right .icon { + color: #dbdbdb; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + .control.has-icons-left .input, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, + .control.has-icons-left .select select { + padding-left: 2.25em; } + .control.has-icons-left .icon.is-left { + left: 0; } + .control.has-icons-right .input, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, + .control.has-icons-right .select select { + padding-right: 2.25em; } + .control.has-icons-right .icon.is-right { + right: 0; } + .control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; } + .control.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { + font-size: 0.75rem; } + .control.is-loading.is-medium:after { + font-size: 1.25rem; } + .control.is-loading.is-large:after { + font-size: 1.5rem; } + +.breadcrumb { + font-size: 1rem; + white-space: nowrap; } + .breadcrumb a { + align-items: center; + color: #2e63b8; + display: flex; + justify-content: center; + padding: 0 0.75em; } + .breadcrumb a:hover { + color: #363636; } + .breadcrumb li { + align-items: center; + display: flex; } + .breadcrumb li:first-child a { + padding-left: 0; } + .breadcrumb li.is-active a { + color: #222222; + cursor: default; + pointer-events: none; } + .breadcrumb li + li::before { + color: #b5b5b5; + content: "\0002f"; } + .breadcrumb ul, + .breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .breadcrumb .icon:first-child { + margin-right: 0.5em; } + .breadcrumb .icon:last-child { + margin-left: 0.5em; } + .breadcrumb.is-centered ol, + .breadcrumb.is-centered ul { + justify-content: center; } + .breadcrumb.is-right ol, + .breadcrumb.is-right ul { + justify-content: flex-end; } + .breadcrumb.is-small, #documenter .docs-sidebar form.docs-search > input.breadcrumb { + font-size: 0.75rem; } + .breadcrumb.is-medium { + font-size: 1.25rem; } + .breadcrumb.is-large { + font-size: 1.5rem; } + .breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; } + .breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; } + .breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; } + .breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; } + +.card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #222222; + max-width: 100%; + position: relative; } + +.card-header { + background-color: transparent; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; } + +.card-header-title { + align-items: center; + color: #222222; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; } + .card-header-title.is-centered { + justify-content: center; } + +.card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; } + +.card-image { + display: block; + position: relative; } + +.card-content { + background-color: transparent; + padding: 1rem 1.25rem; } + +.card-footer { + background-color: transparent; + border-top: 1px solid #dbdbdb; + align-items: stretch; + display: flex; } + +.card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; } + .card-footer-item:not(:last-child) { + border-right: 1px solid #dbdbdb; } + +.card .media:not(:last-child) { + margin-bottom: 1.5rem; } + +.dropdown { + display: inline-flex; + position: relative; + vertical-align: top; } + .dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { + display: block; } + .dropdown.is-right .dropdown-menu { + left: auto; + right: 0; } + .dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; } + +.dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; } + +.dropdown-content { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + +.dropdown-item { + color: #4a4a4a; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; } + +a.dropdown-item, +button.dropdown-item { + padding-right: 3rem; + text-align: left; + white-space: nowrap; + width: 100%; } + a.dropdown-item:hover, + button.dropdown-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + a.dropdown-item.is-active, + button.dropdown-item.is-active { + background-color: #2e63b8; + color: #fff; } + +.dropdown-divider { + background-color: #dbdbdb; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; } + +.level { + align-items: center; + justify-content: space-between; } + .level code { + border-radius: 4px; } + .level img { + display: inline-block; + vertical-align: top; } + .level.is-mobile { + display: flex; } + .level.is-mobile .level-left, + .level.is-mobile .level-right { + display: flex; } + .level.is-mobile .level-left + .level-right { + margin-top: 0; } + .level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level { + display: flex; } + .level > .level-item:not(.is-narrow) { + flex-grow: 1; } } + +.level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; } + .level-item .title, + .level-item .subtitle { + margin-bottom: 0; } + @media screen and (max-width: 768px) { + .level-item:not(:last-child) { + margin-bottom: 0.75rem; } } + +.level-left, +.level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + .level-left .level-item.is-flexible, + .level-right .level-item.is-flexible { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level-left .level-item:not(:last-child), + .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; } } + +.level-left { + align-items: center; + justify-content: flex-start; } + @media screen and (max-width: 768px) { + .level-left + .level-right { + margin-top: 1.5rem; } } + @media screen and (min-width: 769px), print { + .level-left { + display: flex; } } + +.level-right { + align-items: center; + justify-content: flex-end; } + @media screen and (min-width: 769px), print { + .level-right { + display: flex; } } + +.list { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } + +.list-item { + display: block; + padding: 0.5em 1em; } + .list-item:not(a) { + color: #222222; } + .list-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; } + .list-item:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; } + .list-item:not(:last-child) { + border-bottom: 1px solid #dbdbdb; } + .list-item.is-active { + background-color: #2e63b8; + color: #fff; } + +a.list-item { + background-color: whitesmoke; + cursor: pointer; } + +.media { + align-items: flex-start; + display: flex; + text-align: left; } + .media .content:not(:last-child) { + margin-bottom: 0.75rem; } + .media .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + display: flex; + padding-top: 0.75rem; } + .media .media .content:not(:last-child), + .media .media .control:not(:last-child) { + margin-bottom: 0.5rem; } + .media .media .media { + padding-top: 0.5rem; } + .media .media .media + .media { + margin-top: 0.5rem; } + .media + .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + margin-top: 1rem; + padding-top: 1rem; } + .media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; } + +.media-left, +.media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + +.media-left { + margin-right: 1rem; } + +.media-right { + margin-left: 1rem; } + +.media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; } + +@media screen and (max-width: 768px) { + .media-content { + overflow-x: auto; } } + +.menu { + font-size: 1rem; } + .menu.is-small, #documenter .docs-sidebar form.docs-search > input.menu { + font-size: 0.75rem; } + .menu.is-medium { + font-size: 1.25rem; } + .menu.is-large { + font-size: 1.5rem; } + +.menu-list { + line-height: 1.25; } + .menu-list a { + border-radius: 2px; + color: #222222; + display: block; + padding: 0.5em 0.75em; } + .menu-list a:hover { + background-color: whitesmoke; + color: #222222; } + .menu-list a.is-active { + background-color: #2e63b8; + color: #fff; } + .menu-list li ul { + border-left: 1px solid #dbdbdb; + margin: 0.75em; + padding-left: 0.75em; } + +.menu-label { + color: #7a7a7a; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; } + .menu-label:not(:first-child) { + margin-top: 1em; } + .menu-label:not(:last-child) { + margin-bottom: 1em; } + +.message { + background-color: whitesmoke; + border-radius: 4px; + font-size: 1rem; } + .message strong { + color: currentColor; } + .message a:not(.button):not(.tag):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .message.is-small, #documenter .docs-sidebar form.docs-search > input.message { + font-size: 0.75rem; } + .message.is-medium { + font-size: 1.25rem; } + .message.is-large { + font-size: 1.5rem; } + .message.is-white { + background-color: white; } + .message.is-white .message-header { + background-color: white; + color: #0a0a0a; } + .message.is-white .message-body { + border-color: white; + color: #4d4d4d; } + .message.is-black { + background-color: #fafafa; } + .message.is-black .message-header { + background-color: #0a0a0a; + color: white; } + .message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; } + .message.is-light { + background-color: #fafafa; } + .message.is-light .message-header { + background-color: whitesmoke; + color: #363636; } + .message.is-light .message-body { + border-color: whitesmoke; + color: #505050; } + .message.is-dark, .content kbd.message { + background-color: #fafafa; } + .message.is-dark .message-header, .content kbd.message .message-header { + background-color: #363636; + color: whitesmoke; } + .message.is-dark .message-body, .content kbd.message .message-body { + border-color: #363636; + color: #2a2a2a; } + .message.is-primary, .docstring > section > a.message.docs-sourcelink { + background-color: #f6fbfd; } + .message.is-primary .message-header, .docstring > section > a.message.docs-sourcelink .message-header { + background-color: #4eb5de; + color: #fff; } + .message.is-primary .message-body, .docstring > section > a.message.docs-sourcelink .message-body { + border-color: #4eb5de; + color: #1f556a; } + .message.is-link { + background-color: #f7f9fd; } + .message.is-link .message-header { + background-color: #2e63b8; + color: #fff; } + .message.is-link .message-body { + border-color: #2e63b8; + color: #264981; } + .message.is-info { + background-color: #f6fbfe; } + .message.is-info .message-header { + background-color: #209cee; + color: #fff; } + .message.is-info .message-body { + border-color: #209cee; + color: #12537e; } + .message.is-success { + background-color: #f6fdf9; } + .message.is-success .message-header { + background-color: #22c35b; + color: #fff; } + .message.is-success .message-body { + border-color: #22c35b; + color: #0f361d; } + .message.is-warning { + background-color: #fffdf5; } + .message.is-warning .message-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .message.is-warning .message-body { + border-color: #ffdd57; + color: #3b3108; } + .message.is-danger { + background-color: #fff5f5; } + .message.is-danger .message-header { + background-color: #da0b00; + color: #fff; } + .message.is-danger .message-body { + border-color: #da0b00; + color: #9b0c04; } + +.message-header { + align-items: center; + background-color: #222222; + border-radius: 4px 4px 0 0; + color: #fff; + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + .message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; } + .message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.message-body { + border-color: #dbdbdb; + border-radius: 4px; + border-style: solid; + border-width: 0 0 0 4px; + color: #222222; + padding: 1em 1.25em; } + .message-body code, + .message-body pre { + background-color: white; } + .message-body pre code { + background-color: transparent; } + +.modal { + align-items: center; + display: none; + flex-direction: column; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; } + .modal.is-active { + display: flex; } + +.modal-background { + background-color: rgba(10, 10, 10, 0.86); } + +.modal-content, +.modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; } + @media screen and (min-width: 769px), print { + .modal-content, + .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; } } + +.modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; } + +.modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; + -ms-overflow-y: visible; } + +.modal-card-head, +.modal-card-foot { + align-items: center; + background-color: whitesmoke; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; } + +.modal-card-head { + border-bottom: 1px solid #dbdbdb; + border-top-left-radius: 6px; + border-top-right-radius: 6px; } + +.modal-card-title { + color: #222222; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; } + +.modal-card-foot { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 1px solid #dbdbdb; } + .modal-card-foot .button:not(:last-child) { + margin-right: 0.5em; } + +.modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; } + +.navbar { + background-color: white; + min-height: 3.25rem; + position: relative; + z-index: 30; } + .navbar.is-white { + background-color: white; + color: #0a0a0a; } + .navbar.is-white .navbar-brand > .navbar-item, + .navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, + .navbar.is-white .navbar-brand .navbar-link:focus, + .navbar.is-white .navbar-brand .navbar-link:hover, + .navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-burger { + color: #0a0a0a; } + @media screen and (min-width: 1056px) { + .navbar.is-white .navbar-start > .navbar-item, + .navbar.is-white .navbar-start .navbar-link, + .navbar.is-white .navbar-end > .navbar-item, + .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, + .navbar.is-white .navbar-start .navbar-link:focus, + .navbar.is-white .navbar-start .navbar-link:hover, + .navbar.is-white .navbar-start .navbar-link.is-active, + .navbar.is-white .navbar-end > a.navbar-item:focus, + .navbar.is-white .navbar-end > a.navbar-item:hover, + .navbar.is-white .navbar-end > a.navbar-item.is-active, + .navbar.is-white .navbar-end .navbar-link:focus, + .navbar.is-white .navbar-end .navbar-link:hover, + .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-start .navbar-link::after, + .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; } } + .navbar.is-black { + background-color: #0a0a0a; + color: white; } + .navbar.is-black .navbar-brand > .navbar-item, + .navbar.is-black .navbar-brand .navbar-link { + color: white; } + .navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, + .navbar.is-black .navbar-brand .navbar-link:focus, + .navbar.is-black .navbar-brand .navbar-link:hover, + .navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-burger { + color: white; } + @media screen and (min-width: 1056px) { + .navbar.is-black .navbar-start > .navbar-item, + .navbar.is-black .navbar-start .navbar-link, + .navbar.is-black .navbar-end > .navbar-item, + .navbar.is-black .navbar-end .navbar-link { + color: white; } + .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, + .navbar.is-black .navbar-start .navbar-link:focus, + .navbar.is-black .navbar-start .navbar-link:hover, + .navbar.is-black .navbar-start .navbar-link.is-active, + .navbar.is-black .navbar-end > a.navbar-item:focus, + .navbar.is-black .navbar-end > a.navbar-item:hover, + .navbar.is-black .navbar-end > a.navbar-item.is-active, + .navbar.is-black .navbar-end .navbar-link:focus, + .navbar.is-black .navbar-end .navbar-link:hover, + .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-start .navbar-link::after, + .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; } + .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; } } + .navbar.is-light { + background-color: whitesmoke; + color: #363636; } + .navbar.is-light .navbar-brand > .navbar-item, + .navbar.is-light .navbar-brand .navbar-link { + color: #363636; } + .navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, + .navbar.is-light .navbar-brand .navbar-link:focus, + .navbar.is-light .navbar-brand .navbar-link:hover, + .navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-brand .navbar-link::after { + border-color: #363636; } + .navbar.is-light .navbar-burger { + color: #363636; } + @media screen and (min-width: 1056px) { + .navbar.is-light .navbar-start > .navbar-item, + .navbar.is-light .navbar-start .navbar-link, + .navbar.is-light .navbar-end > .navbar-item, + .navbar.is-light .navbar-end .navbar-link { + color: #363636; } + .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, + .navbar.is-light .navbar-start .navbar-link:focus, + .navbar.is-light .navbar-start .navbar-link:hover, + .navbar.is-light .navbar-start .navbar-link.is-active, + .navbar.is-light .navbar-end > a.navbar-item:focus, + .navbar.is-light .navbar-end > a.navbar-item:hover, + .navbar.is-light .navbar-end > a.navbar-item.is-active, + .navbar.is-light .navbar-end .navbar-link:focus, + .navbar.is-light .navbar-end .navbar-link:hover, + .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-start .navbar-link::after, + .navbar.is-light .navbar-end .navbar-link::after { + border-color: #363636; } + .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #363636; } } + .navbar.is-dark, .content kbd.navbar { + background-color: #363636; + color: whitesmoke; } + .navbar.is-dark .navbar-brand > .navbar-item, .content kbd.navbar .navbar-brand > .navbar-item, + .navbar.is-dark .navbar-brand .navbar-link, + .content kbd.navbar .navbar-brand .navbar-link { + color: whitesmoke; } + .navbar.is-dark .navbar-brand > a.navbar-item:focus, .content kbd.navbar .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .content kbd.navbar .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, .content kbd.navbar .navbar-brand > a.navbar-item.is-active, + .navbar.is-dark .navbar-brand .navbar-link:focus, + .content kbd.navbar .navbar-brand .navbar-link:focus, + .navbar.is-dark .navbar-brand .navbar-link:hover, + .content kbd.navbar .navbar-brand .navbar-link:hover, + .navbar.is-dark .navbar-brand .navbar-link.is-active, + .content kbd.navbar .navbar-brand .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-brand .navbar-link::after, .content kbd.navbar .navbar-brand .navbar-link::after { + border-color: whitesmoke; } + .navbar.is-dark .navbar-burger, .content kbd.navbar .navbar-burger { + color: whitesmoke; } + @media screen and (min-width: 1056px) { + .navbar.is-dark .navbar-start > .navbar-item, .content kbd.navbar .navbar-start > .navbar-item, + .navbar.is-dark .navbar-start .navbar-link, + .content kbd.navbar .navbar-start .navbar-link, + .navbar.is-dark .navbar-end > .navbar-item, + .content kbd.navbar .navbar-end > .navbar-item, + .navbar.is-dark .navbar-end .navbar-link, + .content kbd.navbar .navbar-end .navbar-link { + color: whitesmoke; } + .navbar.is-dark .navbar-start > a.navbar-item:focus, .content kbd.navbar .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .content kbd.navbar .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, .content kbd.navbar .navbar-start > a.navbar-item.is-active, + .navbar.is-dark .navbar-start .navbar-link:focus, + .content kbd.navbar .navbar-start .navbar-link:focus, + .navbar.is-dark .navbar-start .navbar-link:hover, + .content kbd.navbar .navbar-start .navbar-link:hover, + .navbar.is-dark .navbar-start .navbar-link.is-active, + .content kbd.navbar .navbar-start .navbar-link.is-active, + .navbar.is-dark .navbar-end > a.navbar-item:focus, + .content kbd.navbar .navbar-end > a.navbar-item:focus, + .navbar.is-dark .navbar-end > a.navbar-item:hover, + .content kbd.navbar .navbar-end > a.navbar-item:hover, + .navbar.is-dark .navbar-end > a.navbar-item.is-active, + .content kbd.navbar .navbar-end > a.navbar-item.is-active, + .navbar.is-dark .navbar-end .navbar-link:focus, + .content kbd.navbar .navbar-end .navbar-link:focus, + .navbar.is-dark .navbar-end .navbar-link:hover, + .content kbd.navbar .navbar-end .navbar-link:hover, + .navbar.is-dark .navbar-end .navbar-link.is-active, + .content kbd.navbar .navbar-end .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-start .navbar-link::after, .content kbd.navbar .navbar-start .navbar-link::after, + .navbar.is-dark .navbar-end .navbar-link::after, + .content kbd.navbar .navbar-end .navbar-link::after { + border-color: whitesmoke; } + .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, + .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { + background-color: #363636; + color: whitesmoke; } } + .navbar.is-primary, .docstring > section > a.navbar.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .navbar.is-primary .navbar-brand > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, + .navbar.is-primary .navbar-brand .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-brand > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, + .navbar.is-primary .navbar-brand .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, + .navbar.is-primary .navbar-brand .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, + .navbar.is-primary .navbar-brand .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-brand .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-burger, .docstring > section > a.navbar.docs-sourcelink .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-primary .navbar-start > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, + .navbar.is-primary .navbar-start .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, + .navbar.is-primary .navbar-end > .navbar-item, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, + .navbar.is-primary .navbar-end .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-start > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, + .navbar.is-primary .navbar-start .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, + .navbar.is-primary .navbar-start .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, + .navbar.is-primary .navbar-start .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, + .navbar.is-primary .navbar-end > a.navbar-item:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, + .navbar.is-primary .navbar-end > a.navbar-item:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, + .navbar.is-primary .navbar-end > a.navbar-item.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, + .navbar.is-primary .navbar-end .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, + .navbar.is-primary .navbar-end .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, + .navbar.is-primary .navbar-end .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-start .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, + .navbar.is-primary .navbar-end .navbar-link::after, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #4eb5de; + color: #fff; } } + .navbar.is-link { + background-color: #2e63b8; + color: #fff; } + .navbar.is-link .navbar-brand > .navbar-item, + .navbar.is-link .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, + .navbar.is-link .navbar-brand .navbar-link:focus, + .navbar.is-link .navbar-brand .navbar-link:hover, + .navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-link .navbar-start > .navbar-item, + .navbar.is-link .navbar-start .navbar-link, + .navbar.is-link .navbar-end > .navbar-item, + .navbar.is-link .navbar-end .navbar-link { + color: #fff; } + .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, + .navbar.is-link .navbar-start .navbar-link:focus, + .navbar.is-link .navbar-start .navbar-link:hover, + .navbar.is-link .navbar-start .navbar-link.is-active, + .navbar.is-link .navbar-end > a.navbar-item:focus, + .navbar.is-link .navbar-end > a.navbar-item:hover, + .navbar.is-link .navbar-end > a.navbar-item.is-active, + .navbar.is-link .navbar-end .navbar-link:focus, + .navbar.is-link .navbar-end .navbar-link:hover, + .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-start .navbar-link::after, + .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #2e63b8; + color: #fff; } } + .navbar.is-info { + background-color: #209cee; + color: #fff; } + .navbar.is-info .navbar-brand > .navbar-item, + .navbar.is-info .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, + .navbar.is-info .navbar-brand .navbar-link:focus, + .navbar.is-info .navbar-brand .navbar-link:hover, + .navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 whitesmoke; } + .navbar.is-fixed-bottom, .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom { + bottom: 0; } + .navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 whitesmoke; } + .navbar.is-fixed-top { + top: 0; } + +html.has-navbar-fixed-top, +body.has-navbar-fixed-top { + padding-top: 3.25rem; } + +html.has-navbar-fixed-bottom, +body.has-navbar-fixed-bottom { + padding-bottom: 3.25rem; } + +.navbar-brand, +.navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 3.25rem; } + +.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { + background-color: transparent; } + +.navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; } + +.navbar-burger { + color: #4a4a4a; + cursor: pointer; + display: block; + height: 3.25rem; + position: relative; + width: 3.25rem; + margin-left: auto; } + .navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, transform; + transition-timing-function: ease-out; + width: 16px; } + .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); } + .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); } + .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); } + .navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); } + .navbar-burger.is-active span:nth-child(1) { + transform: translateY(5px) rotate(45deg); } + .navbar-burger.is-active span:nth-child(2) { + opacity: 0; } + .navbar-burger.is-active span:nth-child(3) { + transform: translateY(-5px) rotate(-45deg); } + +.navbar-menu { + display: none; } + +.navbar-item, +.navbar-link { + color: #4a4a4a; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; } + .navbar-item .icon:only-child, + .navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; } + +a.navbar-item, +.navbar-link { + cursor: pointer; } + a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, + .navbar-link:focus, + .navbar-link:focus-within, + .navbar-link:hover, + .navbar-link.is-active { + background-color: #fafafa; + color: #2e63b8; } + +.navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; } + .navbar-item img { + max-height: 1.75rem; } + .navbar-item.has-dropdown { + padding: 0; } + .navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 3.25rem; + padding-bottom: calc(0.5rem - 1px); } + .navbar-item.is-tab:focus, .navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #2e63b8; } + .navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #2e63b8; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #2e63b8; + padding-bottom: calc(0.5rem - 3px); } + +.navbar-content { + flex-grow: 1; + flex-shrink: 1; } + +.navbar-link:not(.is-arrowless) { + padding-right: 2.5em; } + .navbar-link:not(.is-arrowless)::after { + border-color: #2e63b8; + margin-top: -0.375em; + right: 1.125em; } + +.navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + .navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; } + +.navbar-divider { + background-color: whitesmoke; + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; } + +@media screen and (max-width: 1055px) { + .navbar > .container { + display: block; } + .navbar-brand .navbar-item, + .navbar-tabs .navbar-item { + align-items: center; + display: flex; } + .navbar-link::after { + display: none; } + .navbar-menu { + background-color: white; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; } + .navbar-menu.is-active { + display: block; } + .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-touch { + bottom: 0; } + .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-touch { + top: 0; } + .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 3.25rem); + overflow: auto; } + html.has-navbar-fixed-top-touch, + body.has-navbar-fixed-top-touch { + padding-top: 3.25rem; } + html.has-navbar-fixed-bottom-touch, + body.has-navbar-fixed-bottom-touch { + padding-bottom: 3.25rem; } } + +@media screen and (min-width: 1056px) { + .navbar, + .navbar-menu, + .navbar-start, + .navbar-end { + align-items: stretch; + display: flex; } + .navbar { + min-height: 3.25rem; } + .navbar.is-spaced { + padding: 1rem 2rem; } + .navbar.is-spaced .navbar-start, + .navbar.is-spaced .navbar-end { + align-items: center; } + .navbar.is-spaced a.navbar-item, + .navbar.is-spaced .navbar-link { + border-radius: 4px; } + .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, + .navbar.is-transparent .navbar-link:focus, + .navbar.is-transparent .navbar-link:hover, + .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; } + .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; } + .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #2e63b8; } + .navbar-burger { + display: none; } + .navbar-item, + .navbar-link { + align-items: center; + display: flex; } + .navbar-item { + display: flex; } + .navbar-item.has-dropdown { + align-items: stretch; } + .navbar-item.has-dropdown-up .navbar-link::after { + transform: rotate(135deg) translate(0.25em, -0.25em); } + .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 2px solid #dbdbdb; + border-radius: 6px 6px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; } + .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; } + .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + transform: translateY(0); } + .navbar-menu { + flex-grow: 1; + flex-shrink: 0; } + .navbar-start { + justify-content: flex-start; + margin-right: auto; } + .navbar-end { + justify-content: flex-end; + margin-left: auto; } + .navbar-dropdown { + background-color: white; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 2px solid #dbdbdb; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; } + .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; } + .navbar-dropdown a.navbar-item { + padding-right: 3rem; } + .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #2e63b8; } + .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { + border-radius: 6px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, transform; } + .navbar-dropdown.is-right { + left: auto; + right: 0; } + .navbar-divider { + display: block; } + .navbar > .container .navbar-brand, + .container > .navbar .navbar-brand { + margin-left: -.75rem; } + .navbar > .container .navbar-menu, + .container > .navbar .navbar-menu { + margin-right: -.75rem; } + .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-desktop { + bottom: 0; } + .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-desktop { + top: 0; } + html.has-navbar-fixed-top-desktop, + body.has-navbar-fixed-top-desktop { + padding-top: 3.25rem; } + html.has-navbar-fixed-bottom-desktop, + body.has-navbar-fixed-bottom-desktop { + padding-bottom: 3.25rem; } + html.has-spaced-navbar-fixed-top, + body.has-spaced-navbar-fixed-top { + padding-top: 5.25rem; } + html.has-spaced-navbar-fixed-bottom, + body.has-spaced-navbar-fixed-bottom { + padding-bottom: 5.25rem; } + a.navbar-item.is-active, + .navbar-link.is-active { + color: #0a0a0a; } + a.navbar-item.is-active:not(:focus):not(:hover), + .navbar-link.is-active:not(:focus):not(:hover) { + background-color: transparent; } + .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #fafafa; } } + +.hero.is-fullheight-with-navbar { + min-height: calc(100vh - 3.25rem); } + +.pagination { + font-size: 1rem; + margin: -0.25rem; } + .pagination.is-small, #documenter .docs-sidebar form.docs-search > input.pagination { + font-size: 0.75rem; } + .pagination.is-medium { + font-size: 1.25rem; } + .pagination.is-large { + font-size: 1.5rem; } + .pagination.is-rounded .pagination-previous, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, + .pagination.is-rounded .pagination-next, + #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; } + .pagination.is-rounded .pagination-link, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { + border-radius: 290486px; } + +.pagination, +.pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + font-size: 1em; + justify-content: center; + margin: 0.25rem; + padding-left: 0.5em; + padding-right: 0.5em; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link { + border-color: #dbdbdb; + color: #363636; + min-width: 2.25em; } + .pagination-previous:hover, + .pagination-next:hover, + .pagination-link:hover { + border-color: #b5b5b5; + color: #363636; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus { + border-color: #2e63b8; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #7a7a7a; + opacity: 0.5; } + +.pagination-previous, +.pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + +.pagination-link.is-current { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + +.pagination-ellipsis { + color: #b5b5b5; + pointer-events: none; } + +.pagination-list { + flex-wrap: wrap; } + +@media screen and (max-width: 768px) { + .pagination { + flex-wrap: wrap; } + .pagination-previous, + .pagination-next { + flex-grow: 1; + flex-shrink: 1; } + .pagination-list li { + flex-grow: 1; + flex-shrink: 1; } } + +@media screen and (min-width: 769px), print { + .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; } + .pagination-previous { + order: 2; } + .pagination-next { + order: 3; } + .pagination { + justify-content: space-between; } + .pagination.is-centered .pagination-previous { + order: 1; } + .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; } + .pagination.is-centered .pagination-next { + order: 3; } + .pagination.is-right .pagination-previous { + order: 1; } + .pagination.is-right .pagination-next { + order: 2; } + .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; } } + +.panel { + font-size: 1rem; } + .panel:not(:last-child) { + margin-bottom: 1.5rem; } + +.panel-heading, +.panel-tabs, +.panel-block { + border-bottom: 1px solid #dbdbdb; + border-left: 1px solid #dbdbdb; + border-right: 1px solid #dbdbdb; } + .panel-heading:first-child, + .panel-tabs:first-child, + .panel-block:first-child { + border-top: 1px solid #dbdbdb; } + +.panel-heading { + background-color: whitesmoke; + border-radius: 4px 4px 0 0; + color: #222222; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; } + +.panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; } + .panel-tabs a { + border-bottom: 1px solid #dbdbdb; + margin-bottom: -1px; + padding: 0.5em; } + .panel-tabs a.is-active { + border-bottom-color: #4a4a4a; + color: #363636; } + +.panel-list a { + color: #222222; } + .panel-list a:hover { + color: #2e63b8; } + +.panel-block { + align-items: center; + color: #222222; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; } + .panel-block input[type="checkbox"] { + margin-right: 0.75em; } + .panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; } + .panel-block.is-wrapped { + flex-wrap: wrap; } + .panel-block.is-active { + border-left-color: #2e63b8; + color: #363636; } + .panel-block.is-active .panel-icon { + color: #2e63b8; } + +a.panel-block, +label.panel-block { + cursor: pointer; } + a.panel-block:hover, + label.panel-block:hover { + background-color: whitesmoke; } + +.panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: #7a7a7a; + margin-right: 0.75em; } + .panel-icon .fa { + font-size: inherit; + line-height: inherit; } + +.tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 1rem; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; } + .tabs a { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #222222; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; } + .tabs a:hover { + border-bottom-color: #222222; + color: #222222; } + .tabs li { + display: block; } + .tabs li.is-active a { + border-bottom-color: #2e63b8; + color: #2e63b8; } + .tabs ul { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; } + .tabs ul.is-left { + padding-right: 0.75em; } + .tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; } + .tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; } + .tabs .icon:first-child { + margin-right: 0.5em; } + .tabs .icon:last-child { + margin-left: 0.5em; } + .tabs.is-centered ul { + justify-content: center; } + .tabs.is-right ul { + justify-content: flex-end; } + .tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 4px 4px 0 0; } + .tabs.is-boxed a:hover { + background-color: whitesmoke; + border-bottom-color: #dbdbdb; } + .tabs.is-boxed li.is-active a { + background-color: white; + border-color: #dbdbdb; + border-bottom-color: transparent !important; } + .tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; } + .tabs.is-toggle a { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; } + .tabs.is-toggle a:hover { + background-color: whitesmoke; + border-color: #b5b5b5; + z-index: 2; } + .tabs.is-toggle li + li { + margin-left: -1px; } + .tabs.is-toggle li:first-child a { + border-radius: 4px 0 0 4px; } + .tabs.is-toggle li:last-child a { + border-radius: 0 4px 4px 0; } + .tabs.is-toggle li.is-active a { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; + z-index: 1; } + .tabs.is-toggle ul { + border-bottom: none; } + .tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; } + .tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; } + .tabs.is-small, #documenter .docs-sidebar form.docs-search > input.tabs { + font-size: 0.75rem; } + .tabs.is-medium { + font-size: 1.25rem; } + .tabs.is-large { + font-size: 1.5rem; } + +.column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; } + .columns.is-mobile > .column.is-narrow { + flex: none; } + .columns.is-mobile > .column.is-full { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-three-quarters { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-two-thirds { + flex: none; + width: 66.6666%; } + .columns.is-mobile > .column.is-half { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-one-third { + flex: none; + width: 33.3333%; } + .columns.is-mobile > .column.is-one-quarter { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-one-fifth { + flex: none; + width: 20%; } + .columns.is-mobile > .column.is-two-fifths { + flex: none; + width: 40%; } + .columns.is-mobile > .column.is-three-fifths { + flex: none; + width: 60%; } + .columns.is-mobile > .column.is-four-fifths { + flex: none; + width: 80%; } + .columns.is-mobile > .column.is-offset-three-quarters { + margin-left: 75%; } + .columns.is-mobile > .column.is-offset-two-thirds { + margin-left: 66.6666%; } + .columns.is-mobile > .column.is-offset-half { + margin-left: 50%; } + .columns.is-mobile > .column.is-offset-one-third { + margin-left: 33.3333%; } + .columns.is-mobile > .column.is-offset-one-quarter { + margin-left: 25%; } + .columns.is-mobile > .column.is-offset-one-fifth { + margin-left: 20%; } + .columns.is-mobile > .column.is-offset-two-fifths { + margin-left: 40%; } + .columns.is-mobile > .column.is-offset-three-fifths { + margin-left: 60%; } + .columns.is-mobile > .column.is-offset-four-fifths { + margin-left: 80%; } + .columns.is-mobile > .column.is-0 { + flex: none; + width: 0%; } + .columns.is-mobile > .column.is-offset-0 { + margin-left: 0%; } + .columns.is-mobile > .column.is-1 { + flex: none; + width: 8.33333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.33333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.66667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.66667%; } + .columns.is-mobile > .column.is-3 { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-offset-3 { + margin-left: 25%; } + .columns.is-mobile > .column.is-4 { + flex: none; + width: 33.33333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.33333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.66667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.66667%; } + .columns.is-mobile > .column.is-6 { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-offset-6 { + margin-left: 50%; } + .columns.is-mobile > .column.is-7 { + flex: none; + width: 58.33333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.33333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.66667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.66667%; } + .columns.is-mobile > .column.is-9 { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-offset-9 { + margin-left: 75%; } + .columns.is-mobile > .column.is-10 { + flex: none; + width: 83.33333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.33333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.66667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.66667%; } + .columns.is-mobile > .column.is-12 { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-offset-12 { + margin-left: 100%; } + @media screen and (max-width: 768px) { + .column.is-narrow-mobile { + flex: none; } + .column.is-full-mobile { + flex: none; + width: 100%; } + .column.is-three-quarters-mobile { + flex: none; + width: 75%; } + .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; } + .column.is-half-mobile { + flex: none; + width: 50%; } + .column.is-one-third-mobile { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-mobile { + flex: none; + width: 25%; } + .column.is-one-fifth-mobile { + flex: none; + width: 20%; } + .column.is-two-fifths-mobile { + flex: none; + width: 40%; } + .column.is-three-fifths-mobile { + flex: none; + width: 60%; } + .column.is-four-fifths-mobile { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-mobile { + margin-left: 75%; } + .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; } + .column.is-offset-half-mobile { + margin-left: 50%; } + .column.is-offset-one-third-mobile { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-mobile { + margin-left: 25%; } + .column.is-offset-one-fifth-mobile { + margin-left: 20%; } + .column.is-offset-two-fifths-mobile { + margin-left: 40%; } + .column.is-offset-three-fifths-mobile { + margin-left: 60%; } + .column.is-offset-four-fifths-mobile { + margin-left: 80%; } + .column.is-0-mobile { + flex: none; + width: 0%; } + .column.is-offset-0-mobile { + margin-left: 0%; } + .column.is-1-mobile { + flex: none; + width: 8.33333%; } + .column.is-offset-1-mobile { + margin-left: 8.33333%; } + .column.is-2-mobile { + flex: none; + width: 16.66667%; } + .column.is-offset-2-mobile { + margin-left: 16.66667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.33333%; } + .column.is-offset-4-mobile { + margin-left: 33.33333%; } + .column.is-5-mobile { + flex: none; + width: 41.66667%; } + .column.is-offset-5-mobile { + margin-left: 41.66667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.33333%; } + .column.is-offset-7-mobile { + margin-left: 58.33333%; } + .column.is-8-mobile { + flex: none; + width: 66.66667%; } + .column.is-offset-8-mobile { + margin-left: 66.66667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.33333%; } + .column.is-offset-10-mobile { + margin-left: 83.33333%; } + .column.is-11-mobile { + flex: none; + width: 91.66667%; } + .column.is-offset-11-mobile { + margin-left: 91.66667%; } + .column.is-12-mobile { + flex: none; + width: 100%; } + .column.is-offset-12-mobile { + margin-left: 100%; } } + @media screen and (min-width: 769px), print { + .column.is-narrow, .column.is-narrow-tablet { + flex: none; } + .column.is-full, .column.is-full-tablet { + flex: none; + width: 100%; } + .column.is-three-quarters, .column.is-three-quarters-tablet { + flex: none; + width: 75%; } + .column.is-two-thirds, .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; } + .column.is-half, .column.is-half-tablet { + flex: none; + width: 50%; } + .column.is-one-third, .column.is-one-third-tablet { + flex: none; + width: 33.3333%; } + .column.is-one-quarter, .column.is-one-quarter-tablet { + flex: none; + width: 25%; } + .column.is-one-fifth, .column.is-one-fifth-tablet { + flex: none; + width: 20%; } + .column.is-two-fifths, .column.is-two-fifths-tablet { + flex: none; + width: 40%; } + .column.is-three-fifths, .column.is-three-fifths-tablet { + flex: none; + width: 60%; } + .column.is-four-fifths, .column.is-four-fifths-tablet { + flex: none; + width: 80%; } + .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { + margin-left: 75%; } + .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; } + .column.is-offset-half, .column.is-offset-half-tablet { + margin-left: 50%; } + .column.is-offset-one-third, .column.is-offset-one-third-tablet { + margin-left: 33.3333%; } + .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { + margin-left: 25%; } + .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { + margin-left: 20%; } + .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { + margin-left: 40%; } + .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { + margin-left: 60%; } + .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { + margin-left: 80%; } + .column.is-0, .column.is-0-tablet { + flex: none; + width: 0%; } + .column.is-offset-0, .column.is-offset-0-tablet { + margin-left: 0%; } + .column.is-1, .column.is-1-tablet { + flex: none; + width: 8.33333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.33333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.66667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.66667%; } + .column.is-3, .column.is-3-tablet { + flex: none; + width: 25%; } + .column.is-offset-3, .column.is-offset-3-tablet { + margin-left: 25%; } + .column.is-4, .column.is-4-tablet { + flex: none; + width: 33.33333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.33333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.66667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.66667%; } + .column.is-6, .column.is-6-tablet { + flex: none; + width: 50%; } + .column.is-offset-6, .column.is-offset-6-tablet { + margin-left: 50%; } + .column.is-7, .column.is-7-tablet { + flex: none; + width: 58.33333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.33333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.66667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.66667%; } + .column.is-9, .column.is-9-tablet { + flex: none; + width: 75%; } + .column.is-offset-9, .column.is-offset-9-tablet { + margin-left: 75%; } + .column.is-10, .column.is-10-tablet { + flex: none; + width: 83.33333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.33333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.66667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.66667%; } + .column.is-12, .column.is-12-tablet { + flex: none; + width: 100%; } + .column.is-offset-12, .column.is-offset-12-tablet { + margin-left: 100%; } } + @media screen and (max-width: 1055px) { + .column.is-narrow-touch { + flex: none; } + .column.is-full-touch { + flex: none; + width: 100%; } + .column.is-three-quarters-touch { + flex: none; + width: 75%; } + .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; } + .column.is-half-touch { + flex: none; + width: 50%; } + .column.is-one-third-touch { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-touch { + flex: none; + width: 25%; } + .column.is-one-fifth-touch { + flex: none; + width: 20%; } + .column.is-two-fifths-touch { + flex: none; + width: 40%; } + .column.is-three-fifths-touch { + flex: none; + width: 60%; } + .column.is-four-fifths-touch { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-touch { + margin-left: 75%; } + .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; } + .column.is-offset-half-touch { + margin-left: 50%; } + .column.is-offset-one-third-touch { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-touch { + margin-left: 25%; } + .column.is-offset-one-fifth-touch { + margin-left: 20%; } + .column.is-offset-two-fifths-touch { + margin-left: 40%; } + .column.is-offset-three-fifths-touch { + margin-left: 60%; } + .column.is-offset-four-fifths-touch { + margin-left: 80%; } + .column.is-0-touch { + flex: none; + width: 0%; } + .column.is-offset-0-touch { + margin-left: 0%; } + .column.is-1-touch { + flex: none; + width: 8.33333%; } + .column.is-offset-1-touch { + margin-left: 8.33333%; } + .column.is-2-touch { + flex: none; + width: 16.66667%; } + .column.is-offset-2-touch { + margin-left: 16.66667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.33333%; } + .column.is-offset-4-touch { + margin-left: 33.33333%; } + .column.is-5-touch { + flex: none; + width: 41.66667%; } + .column.is-offset-5-touch { + margin-left: 41.66667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.33333%; } + .column.is-offset-7-touch { + margin-left: 58.33333%; } + .column.is-8-touch { + flex: none; + width: 66.66667%; } + .column.is-offset-8-touch { + margin-left: 66.66667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.33333%; } + .column.is-offset-10-touch { + margin-left: 83.33333%; } + .column.is-11-touch { + flex: none; + width: 91.66667%; } + .column.is-offset-11-touch { + margin-left: 91.66667%; } + .column.is-12-touch { + flex: none; + width: 100%; } + .column.is-offset-12-touch { + margin-left: 100%; } } + @media screen and (min-width: 1056px) { + .column.is-narrow-desktop { + flex: none; } + .column.is-full-desktop { + flex: none; + width: 100%; } + .column.is-three-quarters-desktop { + flex: none; + width: 75%; } + .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; } + .column.is-half-desktop { + flex: none; + width: 50%; } + .column.is-one-third-desktop { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-desktop { + flex: none; + width: 25%; } + .column.is-one-fifth-desktop { + flex: none; + width: 20%; } + .column.is-two-fifths-desktop { + flex: none; + width: 40%; } + .column.is-three-fifths-desktop { + flex: none; + width: 60%; } + .column.is-four-fifths-desktop { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-desktop { + margin-left: 75%; } + .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; } + .column.is-offset-half-desktop { + margin-left: 50%; } + .column.is-offset-one-third-desktop { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-desktop { + margin-left: 25%; } + .column.is-offset-one-fifth-desktop { + margin-left: 20%; } + .column.is-offset-two-fifths-desktop { + margin-left: 40%; } + .column.is-offset-three-fifths-desktop { + margin-left: 60%; } + .column.is-offset-four-fifths-desktop { + margin-left: 80%; } + .column.is-0-desktop { + flex: none; + width: 0%; } + .column.is-offset-0-desktop { + margin-left: 0%; } + .column.is-1-desktop { + flex: none; + width: 8.33333%; } + .column.is-offset-1-desktop { + margin-left: 8.33333%; } + .column.is-2-desktop { + flex: none; + width: 16.66667%; } + .column.is-offset-2-desktop { + margin-left: 16.66667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.33333%; } + .column.is-offset-4-desktop { + margin-left: 33.33333%; } + .column.is-5-desktop { + flex: none; + width: 41.66667%; } + .column.is-offset-5-desktop { + margin-left: 41.66667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.33333%; } + .column.is-offset-7-desktop { + margin-left: 58.33333%; } + .column.is-8-desktop { + flex: none; + width: 66.66667%; } + .column.is-offset-8-desktop { + margin-left: 66.66667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.33333%; } + .column.is-offset-10-desktop { + margin-left: 83.33333%; } + .column.is-11-desktop { + flex: none; + width: 91.66667%; } + .column.is-offset-11-desktop { + margin-left: 91.66667%; } + .column.is-12-desktop { + flex: none; + width: 100%; } + .column.is-offset-12-desktop { + margin-left: 100%; } } + @media screen and (min-width: 1216px) { + .column.is-narrow-widescreen { + flex: none; } + .column.is-full-widescreen { + flex: none; + width: 100%; } + .column.is-three-quarters-widescreen { + flex: none; + width: 75%; } + .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; } + .column.is-half-widescreen { + flex: none; + width: 50%; } + .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-widescreen { + flex: none; + width: 25%; } + .column.is-one-fifth-widescreen { + flex: none; + width: 20%; } + .column.is-two-fifths-widescreen { + flex: none; + width: 40%; } + .column.is-three-fifths-widescreen { + flex: none; + width: 60%; } + .column.is-four-fifths-widescreen { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-widescreen { + margin-left: 75%; } + .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; } + .column.is-offset-half-widescreen { + margin-left: 50%; } + .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-widescreen { + margin-left: 25%; } + .column.is-offset-one-fifth-widescreen { + margin-left: 20%; } + .column.is-offset-two-fifths-widescreen { + margin-left: 40%; } + .column.is-offset-three-fifths-widescreen { + margin-left: 60%; } + .column.is-offset-four-fifths-widescreen { + margin-left: 80%; } + .column.is-0-widescreen { + flex: none; + width: 0%; } + .column.is-offset-0-widescreen { + margin-left: 0%; } + .column.is-1-widescreen { + flex: none; + width: 8.33333%; } + .column.is-offset-1-widescreen { + margin-left: 8.33333%; } + .column.is-2-widescreen { + flex: none; + width: 16.66667%; } + .column.is-offset-2-widescreen { + margin-left: 16.66667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.33333%; } + .column.is-offset-4-widescreen { + margin-left: 33.33333%; } + .column.is-5-widescreen { + flex: none; + width: 41.66667%; } + .column.is-offset-5-widescreen { + margin-left: 41.66667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.33333%; } + .column.is-offset-7-widescreen { + margin-left: 58.33333%; } + .column.is-8-widescreen { + flex: none; + width: 66.66667%; } + .column.is-offset-8-widescreen { + margin-left: 66.66667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.33333%; } + .column.is-offset-10-widescreen { + margin-left: 83.33333%; } + .column.is-11-widescreen { + flex: none; + width: 91.66667%; } + .column.is-offset-11-widescreen { + margin-left: 91.66667%; } + .column.is-12-widescreen { + flex: none; + width: 100%; } + .column.is-offset-12-widescreen { + margin-left: 100%; } } + @media screen and (min-width: 1408px) { + .column.is-narrow-fullhd { + flex: none; } + .column.is-full-fullhd { + flex: none; + width: 100%; } + .column.is-three-quarters-fullhd { + flex: none; + width: 75%; } + .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; } + .column.is-half-fullhd { + flex: none; + width: 50%; } + .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-fullhd { + flex: none; + width: 25%; } + .column.is-one-fifth-fullhd { + flex: none; + width: 20%; } + .column.is-two-fifths-fullhd { + flex: none; + width: 40%; } + .column.is-three-fifths-fullhd { + flex: none; + width: 60%; } + .column.is-four-fifths-fullhd { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-fullhd { + margin-left: 75%; } + .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; } + .column.is-offset-half-fullhd { + margin-left: 50%; } + .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-fullhd { + margin-left: 25%; } + .column.is-offset-one-fifth-fullhd { + margin-left: 20%; } + .column.is-offset-two-fifths-fullhd { + margin-left: 40%; } + .column.is-offset-three-fifths-fullhd { + margin-left: 60%; } + .column.is-offset-four-fifths-fullhd { + margin-left: 80%; } + .column.is-0-fullhd { + flex: none; + width: 0%; } + .column.is-offset-0-fullhd { + margin-left: 0%; } + .column.is-1-fullhd { + flex: none; + width: 8.33333%; } + .column.is-offset-1-fullhd { + margin-left: 8.33333%; } + .column.is-2-fullhd { + flex: none; + width: 16.66667%; } + .column.is-offset-2-fullhd { + margin-left: 16.66667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.33333%; } + .column.is-offset-4-fullhd { + margin-left: 33.33333%; } + .column.is-5-fullhd { + flex: none; + width: 41.66667%; } + .column.is-offset-5-fullhd { + margin-left: 41.66667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.33333%; } + .column.is-offset-7-fullhd { + margin-left: 58.33333%; } + .column.is-8-fullhd { + flex: none; + width: 66.66667%; } + .column.is-offset-8-fullhd { + margin-left: 66.66667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.33333%; } + .column.is-offset-10-fullhd { + margin-left: 83.33333%; } + .column.is-11-fullhd { + flex: none; + width: 91.66667%; } + .column.is-offset-11-fullhd { + margin-left: 91.66667%; } + .column.is-12-fullhd { + flex: none; + width: 100%; } + .column.is-offset-12-fullhd { + margin-left: 100%; } } + +.columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .columns:last-child { + margin-bottom: -0.75rem; } + .columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); } + .columns.is-centered { + justify-content: center; } + .columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; } + .columns.is-gapless > .column { + margin: 0; + padding: 0 !important; } + .columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; } + .columns.is-gapless:last-child { + margin-bottom: 0; } + .columns.is-mobile { + display: flex; } + .columns.is-multiline { + flex-wrap: wrap; } + .columns.is-vcentered { + align-items: center; } + @media screen and (min-width: 769px), print { + .columns:not(.is-desktop) { + display: flex; } } + @media screen and (min-width: 1056px) { + .columns.is-desktop { + display: flex; } } + +.columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); } + .columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); } + .columns.is-variable.is-0 { + --columnGap: 0rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-0-mobile { + --columnGap: 0rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-0-tablet { + --columnGap: 0rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-0-tablet-only { + --columnGap: 0rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-0-touch { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-0-desktop { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-0-desktop-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-0-widescreen { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-0-widescreen-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-0-fullhd { + --columnGap: 0rem; } } + .columns.is-variable.is-1 { + --columnGap: 0.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-1-mobile { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-1-tablet { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-1-tablet-only { + --columnGap: 0.25rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-1-touch { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-1-desktop { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-1-desktop-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-1-widescreen { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-1-widescreen-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-1-fullhd { + --columnGap: 0.25rem; } } + .columns.is-variable.is-2 { + --columnGap: 0.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-2-mobile { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-2-tablet { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-2-tablet-only { + --columnGap: 0.5rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-2-touch { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-2-desktop { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-2-desktop-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-2-widescreen { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-2-widescreen-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-2-fullhd { + --columnGap: 0.5rem; } } + .columns.is-variable.is-3 { + --columnGap: 0.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-3-mobile { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-3-tablet { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-3-tablet-only { + --columnGap: 0.75rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-3-touch { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-3-desktop { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-3-desktop-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-3-widescreen { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-3-widescreen-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-3-fullhd { + --columnGap: 0.75rem; } } + .columns.is-variable.is-4 { + --columnGap: 1rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-4-mobile { + --columnGap: 1rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-4-tablet { + --columnGap: 1rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-4-tablet-only { + --columnGap: 1rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-4-touch { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-4-desktop { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-4-desktop-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-4-widescreen { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-4-widescreen-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-4-fullhd { + --columnGap: 1rem; } } + .columns.is-variable.is-5 { + --columnGap: 1.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-5-mobile { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-5-tablet { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-5-tablet-only { + --columnGap: 1.25rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-5-touch { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-5-desktop { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-5-desktop-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-5-widescreen { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-5-widescreen-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-5-fullhd { + --columnGap: 1.25rem; } } + .columns.is-variable.is-6 { + --columnGap: 1.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-6-mobile { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-6-tablet { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-6-tablet-only { + --columnGap: 1.5rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-6-touch { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-6-desktop { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-6-desktop-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-6-widescreen { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-6-widescreen-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-6-fullhd { + --columnGap: 1.5rem; } } + .columns.is-variable.is-7 { + --columnGap: 1.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-7-mobile { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-7-tablet { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-7-tablet-only { + --columnGap: 1.75rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-7-touch { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-7-desktop { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-7-desktop-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-7-widescreen { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-7-widescreen-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-7-fullhd { + --columnGap: 1.75rem; } } + .columns.is-variable.is-8 { + --columnGap: 2rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-8-mobile { + --columnGap: 2rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-8-tablet { + --columnGap: 2rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-8-tablet-only { + --columnGap: 2rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-8-touch { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-8-desktop { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-8-desktop-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-8-widescreen { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-8-widescreen-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-8-fullhd { + --columnGap: 2rem; } } + +.tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: min-content; } + .tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .tile.is-ancestor:last-child { + margin-bottom: -0.75rem; } + .tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; } + .tile.is-child { + margin: 0 !important; } + .tile.is-parent { + padding: 0.75rem; } + .tile.is-vertical { + flex-direction: column; } + .tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; } + @media screen and (min-width: 769px), print { + .tile:not(.is-child) { + display: flex; } + .tile.is-1 { + flex: none; + width: 8.33333%; } + .tile.is-2 { + flex: none; + width: 16.66667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.33333%; } + .tile.is-5 { + flex: none; + width: 41.66667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.33333%; } + .tile.is-8 { + flex: none; + width: 66.66667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.33333%; } + .tile.is-11 { + flex: none; + width: 91.66667%; } + .tile.is-12 { + flex: none; + width: 100%; } } + +.hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; } + .hero .navbar { + background: none; } + .hero .tabs ul { + border-bottom: none; } + .hero.is-white { + background-color: white; + color: #0a0a0a; } + .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-white strong { + color: inherit; } + .hero.is-white .title { + color: #0a0a0a; } + .hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); } + .hero.is-white .subtitle a:not(.button), + .hero.is-white .subtitle strong { + color: #0a0a0a; } + @media screen and (max-width: 1055px) { + .hero.is-white .navbar-menu { + background-color: white; } } + .hero.is-white .navbar-item, + .hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); } + .hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, + .hero.is-white .navbar-link:hover, + .hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; } + .hero.is-white .tabs a:hover { + opacity: 1; } + .hero.is-white .tabs li.is-active a { + opacity: 1; } + .hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; } + .hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } + .hero.is-black { + background-color: #0a0a0a; + color: white; } + .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-black strong { + color: inherit; } + .hero.is-black .title { + color: white; } + .hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-black .subtitle a:not(.button), + .hero.is-black .subtitle strong { + color: white; } + @media screen and (max-width: 1055px) { + .hero.is-black .navbar-menu { + background-color: #0a0a0a; } } + .hero.is-black .navbar-item, + .hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, + .hero.is-black .navbar-link:hover, + .hero.is-black .navbar-link.is-active { + background-color: black; + color: white; } + .hero.is-black .tabs a { + color: white; + opacity: 0.9; } + .hero.is-black .tabs a:hover { + opacity: 1; } + .hero.is-black .tabs li.is-active a { + opacity: 1; } + .hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { + color: white; } + .hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; } + .hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } + @media screen and (max-width: 768px) { + .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } + .hero.is-light { + background-color: whitesmoke; + color: #363636; } + .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-light strong { + color: inherit; } + .hero.is-light .title { + color: #363636; } + .hero.is-light .subtitle { + color: rgba(54, 54, 54, 0.9); } + .hero.is-light .subtitle a:not(.button), + .hero.is-light .subtitle strong { + color: #363636; } + @media screen and (max-width: 1055px) { + .hero.is-light .navbar-menu { + background-color: whitesmoke; } } + .hero.is-light .navbar-item, + .hero.is-light .navbar-link { + color: rgba(54, 54, 54, 0.7); } + .hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, + .hero.is-light .navbar-link:hover, + .hero.is-light .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .hero.is-light .tabs a { + color: #363636; + opacity: 0.9; } + .hero.is-light .tabs a:hover { + opacity: 1; } + .hero.is-light .tabs li.is-active a { + opacity: 1; } + .hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { + color: #363636; } + .hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .hero.is-light.is-bold { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } } + .hero.is-dark, .content kbd.hero { + background-color: #363636; + color: whitesmoke; } + .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-dark strong, + .content kbd.hero strong { + color: inherit; } + .hero.is-dark .title, .content kbd.hero .title { + color: whitesmoke; } + .hero.is-dark .subtitle, .content kbd.hero .subtitle { + color: rgba(245, 245, 245, 0.9); } + .hero.is-dark .subtitle a:not(.button), .content kbd.hero .subtitle a:not(.button), + .hero.is-dark .subtitle strong, + .content kbd.hero .subtitle strong { + color: whitesmoke; } + @media screen and (max-width: 1055px) { + .hero.is-dark .navbar-menu, .content kbd.hero .navbar-menu { + background-color: #363636; } } + .hero.is-dark .navbar-item, .content kbd.hero .navbar-item, + .hero.is-dark .navbar-link, + .content kbd.hero .navbar-link { + color: rgba(245, 245, 245, 0.7); } + .hero.is-dark a.navbar-item:hover, .content kbd.hero a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, .content kbd.hero a.navbar-item.is-active, + .hero.is-dark .navbar-link:hover, + .content kbd.hero .navbar-link:hover, + .hero.is-dark .navbar-link.is-active, + .content kbd.hero .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .hero.is-dark .tabs a, .content kbd.hero .tabs a { + color: whitesmoke; + opacity: 0.9; } + .hero.is-dark .tabs a:hover, .content kbd.hero .tabs a:hover { + opacity: 1; } + .hero.is-dark .tabs li.is-active a, .content kbd.hero .tabs li.is-active a { + opacity: 1; } + .hero.is-dark .tabs.is-boxed a, .content kbd.hero .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a, .content kbd.hero .tabs.is-toggle a { + color: whitesmoke; } + .hero.is-dark .tabs.is-boxed a:hover, .content kbd.hero .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover, .content kbd.hero .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-dark .tabs.is-boxed li.is-active a, .content kbd.hero .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .content kbd.hero .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover, .content kbd.hero .tabs.is-toggle li.is-active a:hover { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .hero.is-dark.is-bold, .content kbd.hero.is-bold { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } + @media screen and (max-width: 768px) { + .hero.is-dark.is-bold .navbar-menu, .content kbd.hero.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } } + .hero.is-primary, .docstring > section > a.hero.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-primary strong, + .docstring > section > a.hero.docs-sourcelink strong { + color: inherit; } + .hero.is-primary .title, .docstring > section > a.hero.docs-sourcelink .title { + color: #fff; } + .hero.is-primary .subtitle, .docstring > section > a.hero.docs-sourcelink .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-primary .subtitle a:not(.button), .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), + .hero.is-primary .subtitle strong, + .docstring > section > a.hero.docs-sourcelink .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-primary .navbar-menu, .docstring > section > a.hero.docs-sourcelink .navbar-menu { + background-color: #4eb5de; } } + .hero.is-primary .navbar-item, .docstring > section > a.hero.docs-sourcelink .navbar-item, + .hero.is-primary .navbar-link, + .docstring > section > a.hero.docs-sourcelink .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-primary a.navbar-item:hover, .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, + .hero.is-primary .navbar-link:hover, + .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, + .hero.is-primary .navbar-link.is-active, + .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .hero.is-primary .tabs a, .docstring > section > a.hero.docs-sourcelink .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-primary .tabs a:hover, .docstring > section > a.hero.docs-sourcelink .tabs a:hover { + opacity: 1; } + .hero.is-primary .tabs li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { + opacity: 1; } + .hero.is-primary .tabs.is-boxed a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { + color: #fff; } + .hero.is-primary .tabs.is-boxed a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-primary .tabs.is-boxed li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + opacity: 1; } + .hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { + color: #fff; } + .hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #da0b00; } + .hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } + @media screen and (max-width: 768px) { + .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } } + .hero.is-small .hero-body, #documenter .docs-sidebar form.docs-search > input.hero .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; } + @media screen and (min-width: 769px), print { + .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; } } + @media screen and (min-width: 769px), print { + .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; } } + .hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { + align-items: center; + display: flex; } + .hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; } + .hero.is-halfheight { + min-height: 50vh; } + .hero.is-fullheight { + min-height: 100vh; } + +.hero-video { + overflow: hidden; } + .hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + transform: translate3d(-50%, -50%, 0); } + .hero-video.is-transparent { + opacity: 0.3; } + @media screen and (max-width: 768px) { + .hero-video { + display: none; } } + +.hero-buttons { + margin-top: 1.5rem; } + @media screen and (max-width: 768px) { + .hero-buttons .button { + display: flex; } + .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; } } + @media screen and (min-width: 769px), print { + .hero-buttons { + display: flex; + justify-content: center; } + .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; } } + +.hero-head, +.hero-foot { + flex-grow: 0; + flex-shrink: 0; } + +.hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; } + +.section { + padding: 3rem 1.5rem; } + @media screen and (min-width: 1056px) { + .section.is-medium { + padding: 9rem 1.5rem; } + .section.is-large { + padding: 18rem 1.5rem; } } + +.footer { + background-color: #fafafa; + padding: 3rem 1.5rem 6rem; } + +h1 .docs-heading-anchor, h1 .docs-heading-anchor:hover, h1 .docs-heading-anchor:visited, h2 .docs-heading-anchor, h2 .docs-heading-anchor:hover, h2 .docs-heading-anchor:visited, h3 .docs-heading-anchor, h3 .docs-heading-anchor:hover, h3 .docs-heading-anchor:visited, h4 .docs-heading-anchor, h4 .docs-heading-anchor:hover, h4 .docs-heading-anchor:visited, h5 .docs-heading-anchor, h5 .docs-heading-anchor:hover, h5 .docs-heading-anchor:visited, h6 .docs-heading-anchor, h6 .docs-heading-anchor:hover, h6 .docs-heading-anchor:visited { + color: #222222; } + +h1 .docs-heading-anchor-permalink, h2 .docs-heading-anchor-permalink, h3 .docs-heading-anchor-permalink, h4 .docs-heading-anchor-permalink, h5 .docs-heading-anchor-permalink, h6 .docs-heading-anchor-permalink { + visibility: hidden; + vertical-align: middle; + margin-left: 0.5em; + font-size: 0.7rem; } + h1 .docs-heading-anchor-permalink::before, h2 .docs-heading-anchor-permalink::before, h3 .docs-heading-anchor-permalink::before, h4 .docs-heading-anchor-permalink::before, h5 .docs-heading-anchor-permalink::before, h6 .docs-heading-anchor-permalink::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f0c1"; } + +h1:hover .docs-heading-anchor-permalink, h2:hover .docs-heading-anchor-permalink, h3:hover .docs-heading-anchor-permalink, h4:hover .docs-heading-anchor-permalink, h5:hover .docs-heading-anchor-permalink, h6:hover .docs-heading-anchor-permalink { + visibility: visible; } + +.docs-dark-only { + display: none !important; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 0.75rem; } + .admonition.is-medium { + font-size: 1.25rem; } + .admonition.is-large { + font-size: 1.5rem; } + .admonition.is-default { + background-color: #b5b5b5; + border-color: #363636; } + .admonition.is-default > .admonition-header { + background-color: #363636; + color: #fff; } + .admonition.is-default > .admonition-body { + color: #fff; } + .admonition.is-info { + background-color: #b8dffa; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #9beeb8; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ff857e; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: #fff; } + .admonition.is-compat { + background-color: #99e6f0; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75em; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 1em 1.25em; } + .admonition-body pre { + background-color: whitesmoke; } + .admonition-body code { + background-color: rgba(0, 0, 0, 0.05); } + +.docstring { + margin-bottom: 1em; + background-color: transparent; + border: 1px solid #dbdbdb; + box-shadow: 2px 2px 3px rgba(10, 10, 10, 0.1); + max-width: 100%; } + .docstring > header { + display: flex; + flex-grow: 1; + align-items: stretch; + padding: 0.75rem; + background-color: whitesmoke; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: none; + border-bottom: 1px solid #dbdbdb; } + .docstring > header code { + background-color: transparent; } + .docstring > header .docstring-binding { + margin-right: 0.3em; } + .docstring > header .docstring-category { + margin-left: 0.3em; } + .docstring > section { + position: relative; + padding: 1rem 1.25rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.625rem; + bottom: 0.5rem; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #222222; } + +.content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + +.content blockquote > ul:first-child, .content blockquote > ol:first-child, .content .admonition-body > ul:first-child, .content .admonition-body > ol:first-child { + margin-top: 0; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; + padding: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +/* This file contain the overall layout. + * + * The main container is
                                  that is identified by id #documenter. + */ +#documenter .docs-main > article { + overflow-wrap: break-word; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: white; + border-bottom: 1px solid #dbdbdb; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + #documenter .docs-main header.docs-navbar .docs-right { + display: flex; + white-space: nowrap; } + #documenter .docs-main header.docs-navbar .docs-right .docs-icon, #documenter .docs-main header.docs-navbar .docs-right .docs-label, #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + display: inline-block; } + #documenter .docs-main header.docs-navbar .docs-right .docs-label { + padding: 0; + margin-left: 0.3em; } + #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { + margin: auto 0 auto 1rem; } + #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + font-size: 1.5rem; + margin: auto 0 auto 1rem; } + #documenter .docs-main header.docs-navbar > * { + margin: auto 0; } + @media screen and (max-width: 1055px) { + #documenter .docs-main header.docs-navbar { + position: sticky; + top: 0; + padding: 0 1rem; + /* For Headroom.js */ + transition-property: top, box-shadow; + -webkit-transition-property: top, box-shadow; + /* Safari */ + transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + /* Safari */ } + #documenter .docs-main header.docs-navbar.headroom--not-top { + box-shadow: 0.2rem 0rem 0.4rem #bbb; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } + #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { + top: -4.5rem; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } } + +#documenter .docs-main section.footnotes { + border-top: 1px solid #dbdbdb; } + #documenter .docs-main section.footnotes li .tag:first-child, #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, #documenter .docs-main section.footnotes li .content kbd:first-child, .content #documenter .docs-main section.footnotes li kbd:first-child { + margin-right: 1em; + margin-bottom: 0.4em; } + +#documenter .docs-main .docs-footer { + display: flex; + margin-left: 0; + margin-right: 0; + border-top: 1px solid #dbdbdb; + padding-top: 1rem; + padding-bottom: 1rem; } + @media screen and (max-width: 1055px) { + #documenter .docs-main .docs-footer { + padding-left: 1rem; + padding-right: 1rem; } } + #documenter .docs-main .docs-footer .docs-footer-nextpage, #documenter .docs-main .docs-footer .docs-footer-prevpage { + flex-grow: 1; } + #documenter .docs-main .docs-footer .docs-footer-nextpage { + text-align: right; } + +#documenter .docs-sidebar { + display: flex; + flex-direction: column; + color: #0a0a0a; + background-color: whitesmoke; + border-right: 1px solid #dbdbdb; + padding: 0; + flex: 0 0 18rem; + z-index: 5; + font-size: 1rem; + position: fixed; + left: -18rem; + width: 18rem; + height: 100%; + transition: left 0.3s; + /* Setting up a nicer theme style for the scrollbar */ } + #documenter .docs-sidebar.visible { + left: 0; + box-shadow: 0.4rem 0rem 0.8rem #bbb; } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar.visible { + box-shadow: none; } } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar { + left: 0; + top: 0; } } + #documenter .docs-sidebar .docs-logo { + margin-top: 1rem; + padding: 0 1rem; } + #documenter .docs-sidebar .docs-logo > img { + max-height: 6rem; + margin: auto; } + #documenter .docs-sidebar .docs-package-name { + flex-shrink: 0; + font-size: 1.5rem; + font-weight: 700; + text-align: center; + white-space: nowrap; + overflow: hidden; + padding: 0.5rem 0; } + #documenter .docs-sidebar .docs-package-name .docs-autofit { + max-width: 16.2rem; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* Managing collapsible submenus */ } + #documenter .docs-sidebar ul.docs-menu > li > .tocitem { + font-weight: bold; } + #documenter .docs-sidebar ul.docs-menu > li li { + font-size: 0.95rem; + margin-left: 1em; + border-left: 1px solid #dbdbdb; } + #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { + display: none; } + #documenter .docs-sidebar ul.docs-menu ul.collapsed { + display: none; } + #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { + display: block; } + #documenter .docs-sidebar ul.docs-menu label.tocitem { + display: flex; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { + flex-grow: 2; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + font-size: 0.75rem; + margin-left: 1rem; + margin-top: auto; + margin-bottom: auto; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f054"; } + #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { + content: "\f078"; } + #documenter .docs-sidebar ul.docs-menu .tocitem { + display: block; + padding: 0.5rem 0.5rem; } + #documenter .docs-sidebar ul.docs-menu .tocitem, #documenter .docs-sidebar ul.docs-menu .tocitem:hover { + color: #0a0a0a; + background: whitesmoke; } + #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { + color: #0a0a0a; + background-color: #ebebeb; } + #documenter .docs-sidebar ul.docs-menu li.is-active { + border-top: 1px solid #dbdbdb; + border-bottom: 1px solid #dbdbdb; + background-color: white; } + #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { + background-color: white; + color: #0a0a0a; } + #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { + background-color: #ebebeb; + color: #0a0a0a; } + #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { + border-top: none; } + #documenter .docs-sidebar ul.docs-menu ul.internal { + margin: 0 0.5rem 0.5rem; + border-top: 1px solid #dbdbdb; } + #documenter .docs-sidebar ul.docs-menu ul.internal li { + font-size: 0.85rem; + border-left: none; + margin-left: 0; + margin-top: 0.5rem; } + #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { + width: 100%; + padding: 0; } + #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { + content: "⚬"; + margin-right: 0.4em; } + #documenter .docs-sidebar form.docs-search { + margin: auto; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + #documenter .docs-sidebar form.docs-search > input { + width: 14.4rem; } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar ul.docs-menu { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { + width: .3rem; + background: none; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #e0e0e0; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { + background: #cccccc; } } + @media screen and (max-width: 1055px) { + #documenter .docs-sidebar { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + #documenter .docs-sidebar::-webkit-scrollbar { + width: .3rem; + background: none; } + #documenter .docs-sidebar::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #e0e0e0; } + #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { + background: #cccccc; } } + +#documenter .docs-main #documenter-search-info { + margin-bottom: 1rem; } + +#documenter .docs-main #documenter-search-results { + list-style-type: circle; + list-style-position: outside; } + #documenter .docs-main #documenter-search-results li { + margin-left: 2rem; } + #documenter .docs-main #documenter-search-results .docs-highlight { + background-color: yellow; } + +/* + +Original highlight.js style (c) Ivan Sagalaev + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #F0F0F0; } + +/* Base color: saturation 0; */ +.hljs, +.hljs-subst { + color: #444; } + +.hljs-comment { + color: #888888; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* User color: hue: 0 */ +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #880000; } + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; } + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #BC6060; } + +/* Language color: hue: 90; */ +.hljs-literal { + color: #78A960; } + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; } + +/* Meta color: hue: 200 */ +.hljs-meta { + color: #1f7199; } + +.hljs-meta-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/v0.11.9/assets/search.js b/v0.11.9/assets/search.js new file mode 100644 index 00000000..e30e9070 --- /dev/null +++ b/v0.11.9/assets/search.js @@ -0,0 +1,247 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.6/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min', + } +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'lunr', 'lodash'], function($, lunr, _) { + +$(document).ready(function() { + // parseUri 1.2.2 + // (c) Steven Levithan + // MIT License + function parseUri (str) { + var o = parseUri.options, + m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), + uri = {}, + i = 14; + + while (i--) uri[o.key[i]] = m[i] || ""; + + uri[o.q.name] = {}; + uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { + if ($1) uri[o.q.name][$1] = $2; + }); + + return uri; + }; + parseUri.options = { + strictMode: false, + key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], + q: { + name: "queryKey", + parser: /(?:^|&)([^&=]*)=?([^&]*)/g + }, + parser: { + strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, + loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ + } + }; + + $("#search-form").submit(function(e) { + e.preventDefault() + }) + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'does', + 'either', + 'ever', + 'every', + 'from', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'into', + 'it', + 'its', + 'just', + 'least', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'who', + 'whom', + 'why', + 'will', + 'would', + 'yet', + 'you', + 'your' + ]) + + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!" + // would not find anything if searching for "add!", only for the entire qualification + lunr.tokenizer.separator = /[\s\-\.]+/ + + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '') + }) + } + + lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter') + lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer') + + var index = lunr(function () { + this.ref('location') + this.field('title',{boost: 100}) + this.field('text') + documenterSearchIndex['docs'].forEach(function(e) { + this.add(e) + }, this) + }) + var store = {} + + documenterSearchIndex['docs'].forEach(function(e) { + store[e.location] = {title: e.title, category: e.category} + }) + + $(function(){ + searchresults = $('#documenter-search-results'); + searchinfo = $('#documenter-search-info'); + searchbox = $('#documenter-search-query'); + function update_search(querystring) { + tokens = lunr.tokenizer(querystring) + results = index.query(function (q) { + tokens.forEach(function (t) { + q.term(t.toString(), { + fields: ["title"], + boost: 100, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["title"], + boost: 10, + usePipeline: true, + editDistance: 2, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["text"], + boost: 1, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + }) + }) + searchinfo.text("Number of results: " + results.length) + searchresults.empty() + results.forEach(function(result) { + data = store[result.ref] + link = $(''+data.title+'') + link.attr('href', documenterBaseURL+'/'+result.ref) + cat = $('('+data.category+')') + li = $('
                                • ').append(link).append(" ").append(cat) + searchresults.append(li) + }) + } + + function update_search_box() { + querystring = searchbox.val() + update_search(querystring) + } + + searchbox.keyup(_.debounce(update_search_box, 250)) + searchbox.change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/v0.11.9/assets/themes/documenter-dark.css b/v0.11.9/assets/themes/documenter-dark.css new file mode 100644 index 00000000..f866234f --- /dev/null +++ b/v0.11.9/assets/themes/documenter-dark.css @@ -0,0 +1,7642 @@ +@charset "UTF-8"; +/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ +@keyframes spinAround { + from { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } + +html.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close, .is-unselectable, html.theme--documenter-dark .button, html.theme--documenter-dark .file, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after, html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + transform: rotate(-45deg); + transform-origin: center; + width: 0.625em; } + +html.theme--documenter-dark .box:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .admonition:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + pointer-events: auto; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; } + html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before, html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:focus, html.theme--documenter-dark .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .delete:active, html.theme--documenter-dark .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete, html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.delete, html.theme--documenter-dark .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.delete, html.theme--documenter-dark .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .button.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .control.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.is-overlay, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, html.theme--documenter-dark .modal, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .button, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 0.4em; + box-shadow: none; + display: inline-flex; + font-size: 15px; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; } + html.theme--documenter-dark .button:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .button:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .is-active.button, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis { + outline: none; } + html.theme--documenter-dark .button[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], + fieldset[disabled] html.theme--documenter-dark .button, + html.theme--documenter-dark fieldset[disabled] .button, + fieldset[disabled] html.theme--documenter-dark .input, + html.theme--documenter-dark fieldset[disabled] .input, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] html.theme--documenter-dark .textarea, + html.theme--documenter-dark fieldset[disabled] .textarea, + fieldset[disabled] html.theme--documenter-dark .select select, + html.theme--documenter-dark .select fieldset[disabled] select, + fieldset[disabled] html.theme--documenter-dark .file-cta, + html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, + fieldset[disabled] html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis { + cursor: not-allowed; } + +/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; } + +ul { + list-style: none; } + +button, +input, +select, +textarea { + margin: 0; } + +html { + box-sizing: border-box; } + +*, *::before, *::after { + box-sizing: inherit; } + +img, +embed, +iframe, +object, +video { + height: auto; + max-width: 100%; } + +audio { + max-width: 100%; } + +iframe { + border: 0; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + td:not([align]), + th:not([align]) { + text-align: left; } + +.is-clearfix::after { + clear: both; + content: " "; + display: table; } + +.is-pulled-left { + float: left !important; } + +.is-pulled-right { + float: right !important; } + +.is-clipped { + overflow: hidden !important; } + +.is-size-1 { + font-size: 3rem !important; } + +.is-size-2 { + font-size: 2.5rem !important; } + +.is-size-3 { + font-size: 2rem !important; } + +.is-size-4 { + font-size: 1.5rem !important; } + +.is-size-5 { + font-size: 1.25rem !important; } + +.is-size-6 { + font-size: 15px !important; } + +.is-size-7, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + font-size: 0.85em !important; } + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; } + .is-size-2-mobile { + font-size: 2.5rem !important; } + .is-size-3-mobile { + font-size: 2rem !important; } + .is-size-4-mobile { + font-size: 1.5rem !important; } + .is-size-5-mobile { + font-size: 1.25rem !important; } + .is-size-6-mobile { + font-size: 15px !important; } + .is-size-7-mobile { + font-size: 0.85em !important; } } + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; } + .is-size-2-tablet { + font-size: 2.5rem !important; } + .is-size-3-tablet { + font-size: 2rem !important; } + .is-size-4-tablet { + font-size: 1.5rem !important; } + .is-size-5-tablet { + font-size: 1.25rem !important; } + .is-size-6-tablet { + font-size: 15px !important; } + .is-size-7-tablet { + font-size: 0.85em !important; } } + +@media screen and (max-width: 1055px) { + .is-size-1-touch { + font-size: 3rem !important; } + .is-size-2-touch { + font-size: 2.5rem !important; } + .is-size-3-touch { + font-size: 2rem !important; } + .is-size-4-touch { + font-size: 1.5rem !important; } + .is-size-5-touch { + font-size: 1.25rem !important; } + .is-size-6-touch { + font-size: 15px !important; } + .is-size-7-touch { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1056px) { + .is-size-1-desktop { + font-size: 3rem !important; } + .is-size-2-desktop { + font-size: 2.5rem !important; } + .is-size-3-desktop { + font-size: 2rem !important; } + .is-size-4-desktop { + font-size: 1.5rem !important; } + .is-size-5-desktop { + font-size: 1.25rem !important; } + .is-size-6-desktop { + font-size: 15px !important; } + .is-size-7-desktop { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1216px) { + .is-size-1-widescreen { + font-size: 3rem !important; } + .is-size-2-widescreen { + font-size: 2.5rem !important; } + .is-size-3-widescreen { + font-size: 2rem !important; } + .is-size-4-widescreen { + font-size: 1.5rem !important; } + .is-size-5-widescreen { + font-size: 1.25rem !important; } + .is-size-6-widescreen { + font-size: 15px !important; } + .is-size-7-widescreen { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1408px) { + .is-size-1-fullhd { + font-size: 3rem !important; } + .is-size-2-fullhd { + font-size: 2.5rem !important; } + .is-size-3-fullhd { + font-size: 2rem !important; } + .is-size-4-fullhd { + font-size: 1.5rem !important; } + .is-size-5-fullhd { + font-size: 1.25rem !important; } + .is-size-6-fullhd { + font-size: 15px !important; } + .is-size-7-fullhd { + font-size: 0.85em !important; } } + +.has-text-centered { + text-align: center !important; } + +.has-text-justified { + text-align: justify !important; } + +.has-text-left { + text-align: left !important; } + +.has-text-right { + text-align: right !important; } + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; } } + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-centered-tablet-only { + text-align: center !important; } } + +@media screen and (max-width: 1055px) { + .has-text-centered-touch { + text-align: center !important; } } + +@media screen and (min-width: 1056px) { + .has-text-centered-desktop { + text-align: center !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-centered-desktop-only { + text-align: center !important; } } + +@media screen and (min-width: 1216px) { + .has-text-centered-widescreen { + text-align: center !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-centered-widescreen-only { + text-align: center !important; } } + +@media screen and (min-width: 1408px) { + .has-text-centered-fullhd { + text-align: center !important; } } + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; } } + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-justified-tablet-only { + text-align: justify !important; } } + +@media screen and (max-width: 1055px) { + .has-text-justified-touch { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) { + .has-text-justified-desktop { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-justified-desktop-only { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) { + .has-text-justified-widescreen { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-justified-widescreen-only { + text-align: justify !important; } } + +@media screen and (min-width: 1408px) { + .has-text-justified-fullhd { + text-align: justify !important; } } + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; } } + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-left-tablet-only { + text-align: left !important; } } + +@media screen and (max-width: 1055px) { + .has-text-left-touch { + text-align: left !important; } } + +@media screen and (min-width: 1056px) { + .has-text-left-desktop { + text-align: left !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-left-desktop-only { + text-align: left !important; } } + +@media screen and (min-width: 1216px) { + .has-text-left-widescreen { + text-align: left !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-left-widescreen-only { + text-align: left !important; } } + +@media screen and (min-width: 1408px) { + .has-text-left-fullhd { + text-align: left !important; } } + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; } } + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-right-tablet-only { + text-align: right !important; } } + +@media screen and (max-width: 1055px) { + .has-text-right-touch { + text-align: right !important; } } + +@media screen and (min-width: 1056px) { + .has-text-right-desktop { + text-align: right !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-right-desktop-only { + text-align: right !important; } } + +@media screen and (min-width: 1216px) { + .has-text-right-widescreen { + text-align: right !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-right-widescreen-only { + text-align: right !important; } } + +@media screen and (min-width: 1408px) { + .has-text-right-fullhd { + text-align: right !important; } } + +.is-capitalized { + text-transform: capitalize !important; } + +.is-lowercase { + text-transform: lowercase !important; } + +.is-uppercase { + text-transform: uppercase !important; } + +.is-italic { + font-style: italic !important; } + +.has-text-white { + color: white !important; } + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; } + +.has-background-white { + background-color: white !important; } + +.has-text-black { + color: #0a0a0a !important; } + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; } + +.has-background-black { + background-color: #0a0a0a !important; } + +.has-text-light { + color: #ecf0f1 !important; } + +a.has-text-light:hover, a.has-text-light:focus { + color: #cfd9db !important; } + +.has-background-light { + background-color: #ecf0f1 !important; } + +.has-text-dark { + color: #282f2f !important; } + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #111414 !important; } + +.has-background-dark { + background-color: #282f2f !important; } + +.has-text-primary { + color: #375a7f !important; } + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #28415b !important; } + +.has-background-primary { + background-color: #375a7f !important; } + +.has-text-link { + color: #1abc9c !important; } + +a.has-text-link:hover, a.has-text-link:focus { + color: #148f77 !important; } + +.has-background-link { + background-color: #1abc9c !important; } + +.has-text-info { + color: #024c7d !important; } + +a.has-text-info:hover, a.has-text-info:focus { + color: #012d4b !important; } + +.has-background-info { + background-color: #024c7d !important; } + +.has-text-success { + color: #008438 !important; } + +a.has-text-success:hover, a.has-text-success:focus { + color: #005122 !important; } + +.has-background-success { + background-color: #008438 !important; } + +.has-text-warning { + color: #ad8100 !important; } + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #7a5b00 !important; } + +.has-background-warning { + background-color: #ad8100 !important; } + +.has-text-danger { + color: #9e1b0d !important; } + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #6f1309 !important; } + +.has-background-danger { + background-color: #9e1b0d !important; } + +.has-text-black-bis { + color: #121212 !important; } + +.has-background-black-bis { + background-color: #121212 !important; } + +.has-text-black-ter { + color: #242424 !important; } + +.has-background-black-ter { + background-color: #242424 !important; } + +.has-text-grey-darker { + color: #282f2f !important; } + +.has-background-grey-darker { + background-color: #282f2f !important; } + +.has-text-grey-dark { + color: #343c3d !important; } + +.has-background-grey-dark { + background-color: #343c3d !important; } + +.has-text-grey { + color: #5e6d6f !important; } + +.has-background-grey { + background-color: #5e6d6f !important; } + +.has-text-grey-light { + color: #8c9b9d !important; } + +.has-background-grey-light { + background-color: #8c9b9d !important; } + +.has-text-grey-lighter { + color: #dbdee0 !important; } + +.has-background-grey-lighter { + background-color: #dbdee0 !important; } + +.has-text-white-ter { + color: #ecf0f1 !important; } + +.has-background-white-ter { + background-color: #ecf0f1 !important; } + +.has-text-white-bis { + color: #fafafa !important; } + +.has-background-white-bis { + background-color: #fafafa !important; } + +.has-text-weight-light { + font-weight: 300 !important; } + +.has-text-weight-normal { + font-weight: 400 !important; } + +.has-text-weight-medium { + font-weight: 500 !important; } + +.has-text-weight-semibold { + font-weight: 600 !important; } + +.has-text-weight-bold { + font-weight: 700 !important; } + +.is-family-primary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.is-marginless { + margin: 0 !important; } + +.is-paddingless { + padding: 0 !important; } + +.is-radiusless { + border-radius: 0 !important; } + +.is-shadowless { + box-shadow: none !important; } + +.is-relative { + position: relative !important; } + +html.theme--documenter-dark { + /* This file contain the overall layout. + * + * The main container is
                                  that is identified by id #documenter. + */ + /* a11y-dark theme */ + /* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ + /* @author: ericwbailey */ + /* Comment */ + /* Red */ + /* Orange */ + /* Yellow */ + /* Green */ + /* Blue */ + /* Purple */ } + html.theme--documenter-dark html { + background-color: #1f2424; + font-size: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + html.theme--documenter-dark article, + html.theme--documenter-dark aside, + html.theme--documenter-dark figure, + html.theme--documenter-dark footer, + html.theme--documenter-dark header, + html.theme--documenter-dark hgroup, + html.theme--documenter-dark section { + display: block; } + html.theme--documenter-dark body, + html.theme--documenter-dark button, + html.theme--documenter-dark input, + html.theme--documenter-dark select, + html.theme--documenter-dark textarea { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #e74c3c; + font-size: 0.875em; + font-weight: normal; + padding: 0.1em; } + html.theme--documenter-dark hr { + background-color: #282f2f; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; } + html.theme--documenter-dark img { + height: auto; + max-width: 100%; } + html.theme--documenter-dark input[type="checkbox"], + html.theme--documenter-dark input[type="radio"] { + vertical-align: baseline; } + html.theme--documenter-dark small { + font-size: 0.875em; } + html.theme--documenter-dark span { + font-style: inherit; + font-weight: inherit; } + html.theme--documenter-dark strong { + color: #f2f2f2; + font-weight: 700; } + html.theme--documenter-dark fieldset { + border: none; } + html.theme--documenter-dark pre { + -webkit-overflow-scrolling: touch; + background-color: #282f2f; + color: #fff; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; } + html.theme--documenter-dark table td, + html.theme--documenter-dark table th { + vertical-align: top; } + html.theme--documenter-dark table td:not([align]), + html.theme--documenter-dark table th:not([align]) { + text-align: left; } + html.theme--documenter-dark table th { + color: #f2f2f2; } + html.theme--documenter-dark .box { + background-color: #343c3d; + border-radius: 8px; + box-shadow: none; + color: #fff; + display: block; + padding: 1.25rem; } + html.theme--documenter-dark a.box:hover, html.theme--documenter-dark a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #1abc9c; } + html.theme--documenter-dark a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #1abc9c; } + html.theme--documenter-dark .button { + background-color: #282f2f; + border-color: #4c5759; + border-width: 1px; + color: #375a7f; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; } + html.theme--documenter-dark .button strong { + color: inherit; } + html.theme--documenter-dark .button .icon, html.theme--documenter-dark .button .icon.is-small, html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search > input.icon, html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search > input.icon, html.theme--documenter-dark .button .icon.is-medium, html.theme--documenter-dark .button .icon.is-large { + height: 1.5em; + width: 1.5em; } + html.theme--documenter-dark .button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; } + html.theme--documenter-dark .button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); } + html.theme--documenter-dark .button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); } + html.theme--documenter-dark .button:hover, html.theme--documenter-dark .button.is-hovered { + border-color: #8c9b9d; + color: #f2f2f2; } + html.theme--documenter-dark .button:focus, html.theme--documenter-dark .button.is-focused { + border-color: #8c9b9d; + color: #17a689; } + html.theme--documenter-dark .button:focus:not(:active), html.theme--documenter-dark .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .button:active, html.theme--documenter-dark .button.is-active { + border-color: #343c3d; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text { + background-color: transparent; + border-color: transparent; + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .button.is-text:hover, html.theme--documenter-dark .button.is-text.is-hovered, html.theme--documenter-dark .button.is-text:focus, html.theme--documenter-dark .button.is-text.is-focused { + background-color: #282f2f; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text:active, html.theme--documenter-dark .button.is-text.is-active { + background-color: #1d2122; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-text { + background-color: transparent; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:hover, html.theme--documenter-dark .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:focus, html.theme--documenter-dark .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:focus:not(:active), html.theme--documenter-dark .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white { + background-color: white; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-hovered { + background-color: black; } + html.theme--documenter-dark .button.is-white.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + html.theme--documenter-dark .button.is-white.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-outlined.is-focused { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-white.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:hover, html.theme--documenter-dark .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:focus, html.theme--documenter-dark .button.is-black.is-focused { + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:focus:not(:active), html.theme--documenter-dark .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-black.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-loading::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-outlined.is-focused { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-black.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-light { + background-color: #ecf0f1; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:hover, html.theme--documenter-dark .button.is-light.is-hovered { + background-color: #e5eaec; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:focus, html.theme--documenter-dark .button.is-light.is-focused { + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:focus:not(:active), html.theme--documenter-dark .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light.is-active { + background-color: #dde4e6; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light { + background-color: #ecf0f1; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-light.is-inverted { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-hovered { + background-color: #1d2122; } + html.theme--documenter-dark .button.is-light.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted { + background-color: #282f2f; + border-color: transparent; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-loading::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-light.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-outlined.is-focused { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-light.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #282f2f; + color: #282f2f; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #282f2f; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark, html.theme--documenter-dark .content kbd.button { + background-color: #282f2f; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover, html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered { + background-color: #232829; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused { + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:focus:not(:active), html.theme--documenter-dark .content kbd.button:focus:not(:active), html.theme--documenter-dark .button.is-dark.is-focused:not(:active), html.theme--documenter-dark .content kbd.button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active { + background-color: #1d2122; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark[disabled], html.theme--documenter-dark .content kbd.button[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark, + fieldset[disabled] html.theme--documenter-dark .content kbd.button { + background-color: #282f2f; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-dark.is-inverted, html.theme--documenter-dark .content kbd.button.is-inverted { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted:hover, html.theme--documenter-dark .content kbd.button.is-inverted:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered { + background-color: #dde4e6; } + html.theme--documenter-dark .button.is-dark.is-inverted[disabled], html.theme--documenter-dark .content kbd.button.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted { + background-color: #ecf0f1; + border-color: transparent; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-loading::after, html.theme--documenter-dark .content kbd.button.is-loading::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-dark.is-outlined, html.theme--documenter-dark .content kbd.button.is-outlined { + background-color: transparent; + border-color: #282f2f; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-outlined.is-focused { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-dark.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined { + background-color: transparent; + border-color: #282f2f; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-primary, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink { + background-color: #375a7f; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink { + background-color: #335476; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:focus:not(:active), html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus:not(:active), html.theme--documenter-dark .button.is-primary.is-focused:not(:active), html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink { + background-color: #2f4d6d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary[disabled], html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink { + background-color: #375a7f; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-primary.is-inverted, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-primary.is-inverted[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-loading.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-primary.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #375a7f; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { + background-color: #375a7f; + border-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { + border-color: transparent transparent #375a7f #375a7f !important; } + html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-primary.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #375a7f; + box-shadow: none; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { + background-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #375a7f #375a7f !important; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-link { + background-color: #1abc9c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:hover, html.theme--documenter-dark .button.is-link.is-hovered { + background-color: #18b193; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:focus, html.theme--documenter-dark .button.is-link.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:focus:not(:active), html.theme--documenter-dark .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link.is-active { + background-color: #17a689; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link { + background-color: #1abc9c; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-link.is-inverted { + background-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-link.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-link.is-outlined { + background-color: transparent; + border-color: #1abc9c; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-outlined.is-focused { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #1abc9c #1abc9c !important; } + html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-link.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined { + background-color: transparent; + border-color: #1abc9c; + box-shadow: none; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #1abc9c #1abc9c !important; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-info { + background-color: #024c7d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:hover, html.theme--documenter-dark .button.is-info.is-hovered { + background-color: #024470; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:focus, html.theme--documenter-dark .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:focus:not(:active), html.theme--documenter-dark .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info.is-active { + background-color: #023d64; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info { + background-color: #024c7d; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-info.is-inverted { + background-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-info.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-info.is-outlined { + background-color: transparent; + border-color: #024c7d; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-outlined.is-focused { + background-color: #024c7d; + border-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #024c7d #024c7d !important; } + html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-info.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined { + background-color: transparent; + border-color: #024c7d; + box-shadow: none; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #024c7d #024c7d !important; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-success { + background-color: #008438; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:hover, html.theme--documenter-dark .button.is-success.is-hovered { + background-color: #007733; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:focus, html.theme--documenter-dark .button.is-success.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:focus:not(:active), html.theme--documenter-dark .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success.is-active { + background-color: #006b2d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success { + background-color: #008438; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-success.is-inverted { + background-color: #fff; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-success.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-success.is-outlined { + background-color: transparent; + border-color: #008438; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-outlined.is-focused { + background-color: #008438; + border-color: #008438; + color: #fff; } + html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #008438 #008438 !important; } + html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-success.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined { + background-color: transparent; + border-color: #008438; + box-shadow: none; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #008438 #008438 !important; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-warning { + background-color: #ad8100; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:hover, html.theme--documenter-dark .button.is-warning.is-hovered { + background-color: #a07700; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:focus, html.theme--documenter-dark .button.is-warning.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:focus:not(:active), html.theme--documenter-dark .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning.is-active { + background-color: #946e00; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning { + background-color: #ad8100; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-warning.is-inverted { + background-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-warning.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ad8100; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-outlined.is-focused { + background-color: #ad8100; + border-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #ad8100 #ad8100 !important; } + html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-warning.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ad8100; + box-shadow: none; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ad8100 #ad8100 !important; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-danger { + background-color: #9e1b0d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:hover, html.theme--documenter-dark .button.is-danger.is-hovered { + background-color: #92190c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:focus, html.theme--documenter-dark .button.is-danger.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:focus:not(:active), html.theme--documenter-dark .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger.is-active { + background-color: #86170b; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger { + background-color: #9e1b0d; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-danger.is-inverted { + background-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-danger.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-danger.is-outlined { + background-color: transparent; + border-color: #9e1b0d; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-outlined.is-focused { + background-color: #9e1b0d; + border-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #9e1b0d #9e1b0d !important; } + html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-danger.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined { + background-color: transparent; + border-color: #9e1b0d; + box-shadow: none; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #9e1b0d #9e1b0d !important; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .button.is-normal { + font-size: 15px; } + html.theme--documenter-dark .button.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .button.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .button[disabled], + fieldset[disabled] html.theme--documenter-dark .button { + background-color: #8c9b9d; + border-color: #dbdee0; + box-shadow: none; + opacity: 0.5; } + html.theme--documenter-dark .button.is-fullwidth { + display: flex; + width: 100%; } + html.theme--documenter-dark .button.is-loading { + color: transparent !important; + pointer-events: none; } + html.theme--documenter-dark .button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; } + html.theme--documenter-dark .button.is-static { + background-color: #282f2f; + border-color: #5e6d6f; + color: #dbdee0; + box-shadow: none; + pointer-events: none; } + html.theme--documenter-dark .button.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .buttons .button { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth) { + margin-right: 0.5rem; } + html.theme--documenter-dark .buttons:last-child { + margin-bottom: -0.5rem; } + html.theme--documenter-dark .buttons:not(:last-child) { + margin-bottom: 1rem; } + html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { + font-size: 1.25rem; } + html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { + font-size: 1.5rem; } + html.theme--documenter-dark .buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; } + html.theme--documenter-dark .buttons.has-addons .button:last-child { + margin-right: 0; } + html.theme--documenter-dark .buttons.has-addons .button:hover, html.theme--documenter-dark .buttons.has-addons .button.is-hovered { + z-index: 2; } + html.theme--documenter-dark .buttons.has-addons .button:focus, html.theme--documenter-dark .buttons.has-addons .button.is-focused, html.theme--documenter-dark .buttons.has-addons .button:active, html.theme--documenter-dark .buttons.has-addons .button.is-active, html.theme--documenter-dark .buttons.has-addons .button.is-selected { + z-index: 3; } + html.theme--documenter-dark .buttons.has-addons .button:focus:hover, html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover, html.theme--documenter-dark .buttons.has-addons .button:active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover { + z-index: 4; } + html.theme--documenter-dark .buttons.has-addons .button.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .buttons.is-centered { + justify-content: center; } + html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + html.theme--documenter-dark .buttons.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + html.theme--documenter-dark .container { + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .container { + max-width: 992px; } + html.theme--documenter-dark .container.is-fluid { + margin-left: 32px; + margin-right: 32px; + max-width: none; } } + @media screen and (max-width: 1215px) { + html.theme--documenter-dark .container.is-widescreen { + max-width: 1152px; } } + @media screen and (max-width: 1407px) { + html.theme--documenter-dark .container.is-fullhd { + max-width: 1344px; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .container { + max-width: 1152px; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .container { + max-width: 1344px; } } + html.theme--documenter-dark .content li + li { + margin-top: 0.25em; } + html.theme--documenter-dark .content p:not(:last-child), + html.theme--documenter-dark .content dl:not(:last-child), + html.theme--documenter-dark .content ol:not(:last-child), + html.theme--documenter-dark .content ul:not(:last-child), + html.theme--documenter-dark .content blockquote:not(:last-child), + html.theme--documenter-dark .content pre:not(:last-child), + html.theme--documenter-dark .content table:not(:last-child) { + margin-bottom: 1em; } + html.theme--documenter-dark .content h1, + html.theme--documenter-dark .content h2, + html.theme--documenter-dark .content h3, + html.theme--documenter-dark .content h4, + html.theme--documenter-dark .content h5, + html.theme--documenter-dark .content h6 { + color: #f2f2f2; + font-weight: 600; + line-height: 1.125; } + html.theme--documenter-dark .content h1 { + font-size: 2em; + margin-bottom: 0.5em; } + html.theme--documenter-dark .content h1:not(:first-child) { + margin-top: 1em; } + html.theme--documenter-dark .content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; } + html.theme--documenter-dark .content h2:not(:first-child) { + margin-top: 1.1428em; } + html.theme--documenter-dark .content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; } + html.theme--documenter-dark .content h3:not(:first-child) { + margin-top: 1.3333em; } + html.theme--documenter-dark .content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; } + html.theme--documenter-dark .content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; } + html.theme--documenter-dark .content h6 { + font-size: 1em; + margin-bottom: 1em; } + html.theme--documenter-dark .content blockquote { + background-color: #282f2f; + border-left: 5px solid #5e6d6f; + padding: 1.25em 1.5em; } + html.theme--documenter-dark .content ol { + list-style-position: outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ol:not([type]) { + list-style-type: decimal; } + html.theme--documenter-dark .content ol:not([type]).is-lower-alpha { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol:not([type]).is-lower-roman { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol:not([type]).is-upper-alpha { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol:not([type]).is-upper-roman { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0.7rem 0.5rem; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: left; } + html.theme--documenter-dark .content table thead td, + html.theme--documenter-dark .content table thead th { + border-width: 0 0 2px; + color: #f2f2f2; } + html.theme--documenter-dark .content table tfoot td, + html.theme--documenter-dark .content table tfoot th { + border-width: 2px 0 0; + color: #f2f2f2; } + html.theme--documenter-dark .content table tbody tr:last-child td, + html.theme--documenter-dark .content table tbody tr:last-child th { + border-bottom-width: 0; } + html.theme--documenter-dark .content .tabs li + li { + margin-top: 0; } + html.theme--documenter-dark .content.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.content { + font-size: 0.85em; } + html.theme--documenter-dark .content.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .content.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; } + html.theme--documenter-dark .icon.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.icon { + height: 1rem; + width: 1rem; } + html.theme--documenter-dark .icon.is-medium { + height: 2rem; + width: 2rem; } + html.theme--documenter-dark .icon.is-large { + height: 3rem; + width: 3rem; } + html.theme--documenter-dark .image, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { + display: block; + position: relative; } + html.theme--documenter-dark .image img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img { + display: block; + height: auto; + width: 100%; } + html.theme--documenter-dark .image img.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img.is-rounded { + border-radius: 290486px; } + html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, + html.theme--documenter-dark .image.is-square .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, + html.theme--documenter-dark .image.is-1by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, + html.theme--documenter-dark .image.is-5by4 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, + html.theme--documenter-dark .image.is-4by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, + html.theme--documenter-dark .image.is-3by2 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, + html.theme--documenter-dark .image.is-5by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, + html.theme--documenter-dark .image.is-16by9 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, + html.theme--documenter-dark .image.is-2by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, + html.theme--documenter-dark .image.is-3by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, + html.theme--documenter-dark .image.is-4by5 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, + html.theme--documenter-dark .image.is-3by4 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, + html.theme--documenter-dark .image.is-2by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, + html.theme--documenter-dark .image.is-3by5 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, + html.theme--documenter-dark .image.is-9by16 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, + html.theme--documenter-dark .image.is-1by2 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, + html.theme--documenter-dark .image.is-1by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { + height: 100%; + width: 100%; } + html.theme--documenter-dark .image.is-square, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square, html.theme--documenter-dark .image.is-1by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 { + padding-top: 100%; } + html.theme--documenter-dark .image.is-5by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 { + padding-top: 80%; } + html.theme--documenter-dark .image.is-4by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 { + padding-top: 75%; } + html.theme--documenter-dark .image.is-3by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 { + padding-top: 66.6666%; } + html.theme--documenter-dark .image.is-5by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 { + padding-top: 60%; } + html.theme--documenter-dark .image.is-16by9, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 { + padding-top: 56.25%; } + html.theme--documenter-dark .image.is-2by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 { + padding-top: 50%; } + html.theme--documenter-dark .image.is-3by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 { + padding-top: 33.3333%; } + html.theme--documenter-dark .image.is-4by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 { + padding-top: 125%; } + html.theme--documenter-dark .image.is-3by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 { + padding-top: 133.3333%; } + html.theme--documenter-dark .image.is-2by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 { + padding-top: 150%; } + html.theme--documenter-dark .image.is-3by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 { + padding-top: 166.6666%; } + html.theme--documenter-dark .image.is-9by16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 { + padding-top: 177.7777%; } + html.theme--documenter-dark .image.is-1by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 { + padding-top: 200%; } + html.theme--documenter-dark .image.is-1by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 { + padding-top: 300%; } + html.theme--documenter-dark .image.is-16x16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16x16 { + height: 16px; + width: 16px; } + html.theme--documenter-dark .image.is-24x24, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-24x24 { + height: 24px; + width: 24px; } + html.theme--documenter-dark .image.is-32x32, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-32x32 { + height: 32px; + width: 32px; } + html.theme--documenter-dark .image.is-48x48, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-48x48 { + height: 48px; + width: 48px; } + html.theme--documenter-dark .image.is-64x64, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-64x64 { + height: 64px; + width: 64px; } + html.theme--documenter-dark .image.is-96x96, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-96x96 { + height: 96px; + width: 96px; } + html.theme--documenter-dark .image.is-128x128, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-128x128 { + height: 128px; + width: 128px; } + html.theme--documenter-dark .notification { + background-color: #282f2f; + border-radius: 0.4em; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; } + html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + html.theme--documenter-dark .notification strong { + color: currentColor; } + html.theme--documenter-dark .notification code, + html.theme--documenter-dark .notification pre { + background: white; } + html.theme--documenter-dark .notification pre code { + background: transparent; } + html.theme--documenter-dark .notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; } + html.theme--documenter-dark .notification .title, + html.theme--documenter-dark .notification .subtitle, + html.theme--documenter-dark .notification .content { + color: currentColor; } + html.theme--documenter-dark .notification.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .notification.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .notification.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .notification.is-dark, html.theme--documenter-dark .content kbd.notification { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .notification.is-primary, html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .notification.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .notification.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .notification.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .notification.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .notification.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 15px; + overflow: hidden; + padding: 0; + width: 100%; } + html.theme--documenter-dark .progress::-webkit-progress-bar { + background-color: #5e6d6f; } + html.theme--documenter-dark .progress::-webkit-progress-value { + background-color: #dbdee0; } + html.theme--documenter-dark .progress::-moz-progress-bar { + background-color: #dbdee0; } + html.theme--documenter-dark .progress::-ms-fill { + background-color: #dbdee0; + border: none; } + html.theme--documenter-dark .progress.is-white::-webkit-progress-value { + background-color: white; } + html.theme--documenter-dark .progress.is-white::-moz-progress-bar { + background-color: white; } + html.theme--documenter-dark .progress.is-white::-ms-fill { + background-color: white; } + html.theme--documenter-dark .progress.is-white:indeterminate { + background-image: linear-gradient(to right, white 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black::-ms-fill { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black:indeterminate { + background-image: linear-gradient(to right, #0a0a0a 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-light::-webkit-progress-value { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light::-moz-progress-bar { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light::-ms-fill { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light:indeterminate { + background-image: linear-gradient(to right, #ecf0f1 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-dark::-webkit-progress-value, html.theme--documenter-dark .content kbd.progress::-webkit-progress-value { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark::-moz-progress-bar, html.theme--documenter-dark .content kbd.progress::-moz-progress-bar { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark::-ms-fill, html.theme--documenter-dark .content kbd.progress::-ms-fill { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark:indeterminate, html.theme--documenter-dark .content kbd.progress:indeterminate { + background-image: linear-gradient(to right, #282f2f 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-primary::-webkit-progress-value, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary::-moz-progress-bar, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary::-ms-fill, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-ms-fill { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary:indeterminate, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink:indeterminate { + background-image: linear-gradient(to right, #375a7f 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-link::-webkit-progress-value { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link::-moz-progress-bar { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link::-ms-fill { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link:indeterminate { + background-image: linear-gradient(to right, #1abc9c 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-info::-webkit-progress-value { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info::-moz-progress-bar { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info::-ms-fill { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info:indeterminate { + background-image: linear-gradient(to right, #024c7d 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-success::-webkit-progress-value { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success::-moz-progress-bar { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success::-ms-fill { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success:indeterminate { + background-image: linear-gradient(to right, #008438 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-warning::-webkit-progress-value { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning::-moz-progress-bar { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning::-ms-fill { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning:indeterminate { + background-image: linear-gradient(to right, #ad8100 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-danger::-webkit-progress-value { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger::-moz-progress-bar { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger::-ms-fill { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger:indeterminate { + background-image: linear-gradient(to right, #9e1b0d 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress:indeterminate { + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-name: moveIndeterminate; + animation-timing-function: linear; + background-color: #5e6d6f; + background-image: linear-gradient(to right, #fff 30%, #5e6d6f 30%); + background-position: top left; + background-repeat: no-repeat; + background-size: 150% 150%; } + html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar { + background-color: transparent; } + html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar { + background-color: transparent; } + html.theme--documenter-dark .progress.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.progress { + height: 0.85em; } + html.theme--documenter-dark .progress.is-medium { + height: 1.25rem; } + html.theme--documenter-dark .progress.is-large { + height: 1.5rem; } + +@keyframes moveIndeterminate { + from { + background-position: 200% 0; } + to { + background-position: -200% 0; } } + html.theme--documenter-dark .table { + background-color: #343c3d; + color: #fff; } + html.theme--documenter-dark .table td, + html.theme--documenter-dark .table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .table td.is-white, + html.theme--documenter-dark .table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .table td.is-black, + html.theme--documenter-dark .table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .table td.is-light, + html.theme--documenter-dark .table th.is-light { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .table td.is-dark, + html.theme--documenter-dark .table th.is-dark { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .table td.is-primary, + html.theme--documenter-dark .table th.is-primary { + background-color: #375a7f; + border-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table td.is-link, + html.theme--documenter-dark .table th.is-link { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .table td.is-info, + html.theme--documenter-dark .table th.is-info { + background-color: #024c7d; + border-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .table td.is-success, + html.theme--documenter-dark .table th.is-success { + background-color: #008438; + border-color: #008438; + color: #fff; } + html.theme--documenter-dark .table td.is-warning, + html.theme--documenter-dark .table th.is-warning { + background-color: #ad8100; + border-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .table td.is-danger, + html.theme--documenter-dark .table th.is-danger { + background-color: #9e1b0d; + border-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .table td.is-narrow, + html.theme--documenter-dark .table th.is-narrow { + white-space: nowrap; + width: 1%; } + html.theme--documenter-dark .table td.is-selected, + html.theme--documenter-dark .table th.is-selected { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table td.is-selected a, + html.theme--documenter-dark .table td.is-selected strong, + html.theme--documenter-dark .table th.is-selected a, + html.theme--documenter-dark .table th.is-selected strong { + color: currentColor; } + html.theme--documenter-dark .table th { + color: #f2f2f2; } + html.theme--documenter-dark .table th:not([align]) { + text-align: left; } + html.theme--documenter-dark .table tr.is-selected { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table tr.is-selected a, + html.theme--documenter-dark .table tr.is-selected strong { + color: currentColor; } + html.theme--documenter-dark .table tr.is-selected td, + html.theme--documenter-dark .table tr.is-selected th { + border-color: #fff; + color: currentColor; } + html.theme--documenter-dark .table thead { + background-color: transparent; } + html.theme--documenter-dark .table thead td, + html.theme--documenter-dark .table thead th { + border-width: 0 0 2px; + color: #f2f2f2; } + html.theme--documenter-dark .table tfoot { + background-color: transparent; } + html.theme--documenter-dark .table tfoot td, + html.theme--documenter-dark .table tfoot th { + border-width: 2px 0 0; + color: #f2f2f2; } + html.theme--documenter-dark .table tbody { + background-color: transparent; } + html.theme--documenter-dark .table tbody tr:last-child td, + html.theme--documenter-dark .table tbody tr:last-child th { + border-bottom-width: 0; } + html.theme--documenter-dark .table.is-bordered td, + html.theme--documenter-dark .table.is-bordered th { + border-width: 1px; } + html.theme--documenter-dark .table.is-bordered tr:last-child td, + html.theme--documenter-dark .table.is-bordered tr:last-child th { + border-bottom-width: 1px; } + html.theme--documenter-dark .table.is-fullwidth { + width: 100%; } + html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #282f2f; } + html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: #282f2f; } + html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { + background-color: #2d3435; } + html.theme--documenter-dark .table.is-narrow td, + html.theme--documenter-dark .table.is-narrow th { + padding: 0.25em 0.5em; } + html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #282f2f; } + html.theme--documenter-dark .table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; } + html.theme--documenter-dark .tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .tags .tag, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags .content kbd, html.theme--documenter-dark .content .tags kbd { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child) { + margin-right: 0.5rem; } + html.theme--documenter-dark .tags:last-child { + margin-bottom: -0.5rem; } + html.theme--documenter-dark .tags:not(:last-child) { + margin-bottom: 1rem; } + html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 0.4em; + color: #fff; + display: inline-flex; + font-size: 0.85em; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + html.theme--documenter-dark .tag:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete, html.theme--documenter-dark .content kbd:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag:not(body).is-white, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-white, html.theme--documenter-dark .content kbd:not(body).is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag:not(body).is-black, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-black, html.theme--documenter-dark .content kbd:not(body).is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag:not(body).is-light, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-light, html.theme--documenter-dark .content kbd:not(body).is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag:not(body).is-dark, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-dark, html.theme--documenter-dark .content kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag:not(body).is-primary, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body).is-primary { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-link, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-link, html.theme--documenter-dark .content kbd:not(body).is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-info, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-info, html.theme--documenter-dark .content kbd:not(body).is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-success, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-success, html.theme--documenter-dark .content kbd:not(body).is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-warning, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-warning, html.theme--documenter-dark .content kbd:not(body).is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-danger, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-danger, html.theme--documenter-dark .content kbd:not(body).is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-normal, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-normal, html.theme--documenter-dark .content kbd:not(body).is-normal { + font-size: 0.85em; } + html.theme--documenter-dark .tag:not(body).is-medium, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-medium, html.theme--documenter-dark .content kbd:not(body).is-medium { + font-size: 15px; } + html.theme--documenter-dark .tag:not(body).is-large, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-large, html.theme--documenter-dark .content kbd:not(body).is-large { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body).is-delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete, html.theme--documenter-dark .content kbd:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before, html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag:not(body).is-delete:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, html.theme--documenter-dark .content kbd:not(body).is-delete:hover, html.theme--documenter-dark .tag:not(body).is-delete:focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, html.theme--documenter-dark .content kbd:not(body).is-delete:focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag:not(body).is-delete:active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:active, html.theme--documenter-dark .content kbd:not(body).is-delete:active { + background-color: #111414; } + html.theme--documenter-dark .tag:not(body).is-rounded, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-rounded, html.theme--documenter-dark .content kbd:not(body).is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tag:not(body) { + border-radius: 290486px; } + html.theme--documenter-dark a.tag:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:hover { + text-decoration: underline; } + html.theme--documenter-dark .title, + html.theme--documenter-dark .subtitle { + word-break: break-word; } + html.theme--documenter-dark .title em, + html.theme--documenter-dark .title span, + html.theme--documenter-dark .subtitle em, + html.theme--documenter-dark .subtitle span { + font-weight: inherit; } + html.theme--documenter-dark .title sub, + html.theme--documenter-dark .subtitle sub { + font-size: 0.75em; } + html.theme--documenter-dark .title sup, + html.theme--documenter-dark .subtitle sup { + font-size: 0.75em; } + html.theme--documenter-dark .title .tag, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .title .content kbd, html.theme--documenter-dark .content .title kbd, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .highlight { + margin-top: -0.75rem; } + html.theme--documenter-dark .title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; } + html.theme--documenter-dark .title.is-1 { + font-size: 3rem; } + html.theme--documenter-dark .title.is-2 { + font-size: 2.5rem; } + html.theme--documenter-dark .title.is-3 { + font-size: 2rem; } + html.theme--documenter-dark .title.is-4 { + font-size: 1.5rem; } + html.theme--documenter-dark .title.is-5 { + font-size: 1.25rem; } + html.theme--documenter-dark .title.is-6 { + font-size: 15px; } + html.theme--documenter-dark .title.is-7 { + font-size: 0.85em; } + html.theme--documenter-dark .subtitle { + color: #8c9b9d; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; } + html.theme--documenter-dark .subtitle strong { + color: #8c9b9d; + font-weight: 600; } + html.theme--documenter-dark .subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; } + html.theme--documenter-dark .subtitle.is-1 { + font-size: 3rem; } + html.theme--documenter-dark .subtitle.is-2 { + font-size: 2.5rem; } + html.theme--documenter-dark .subtitle.is-3 { + font-size: 2rem; } + html.theme--documenter-dark .subtitle.is-4 { + font-size: 1.5rem; } + html.theme--documenter-dark .subtitle.is-5 { + font-size: 1.25rem; } + html.theme--documenter-dark .subtitle.is-6 { + font-size: 15px; } + html.theme--documenter-dark .subtitle.is-7 { + font-size: 0.85em; } + html.theme--documenter-dark .heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; } + html.theme--documenter-dark .highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; } + html.theme--documenter-dark .highlight pre { + overflow: auto; + max-width: 100%; } + html.theme--documenter-dark .number { + align-items: center; + background-color: #282f2f; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; } + html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .select select::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .select select::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .select select:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .select select:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .select select.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], + fieldset[disabled] html.theme--documenter-dark .input, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + fieldset[disabled] html.theme--documenter-dark .textarea, + fieldset[disabled] html.theme--documenter-dark .select select { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .select select[disabled]::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .select select[disabled]:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly], html.theme--documenter-dark .textarea[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white, html.theme--documenter-dark .is-white.textarea { + border-color: white; } + html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-active, html.theme--documenter-dark .is-white.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black, html.theme--documenter-dark .is-black.textarea { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-active, html.theme--documenter-dark .is-black.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light, html.theme--documenter-dark .is-light.textarea { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-active, html.theme--documenter-dark .is-light.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark .content kbd.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link, html.theme--documenter-dark .is-link.textarea { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-active, html.theme--documenter-dark .is-link.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info, html.theme--documenter-dark .is-info.textarea { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-active, html.theme--documenter-dark .is-info.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success, html.theme--documenter-dark .is-success.textarea { + border-color: #008438; } + html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-active, html.theme--documenter-dark .is-success.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning, html.theme--documenter-dark .is-warning.textarea { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, html.theme--documenter-dark .is-warning.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger, html.theme--documenter-dark .is-danger.textarea { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, html.theme--documenter-dark .is-danger.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .is-small.textarea { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium, html.theme--documenter-dark .is-medium.textarea { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large, html.theme--documenter-dark .is-large.textarea { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth, html.theme--documenter-dark .is-fullwidth.textarea { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline, html.theme--documenter-dark .is-inline.textarea { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .input.is-static, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; } + html.theme--documenter-dark .textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; } + html.theme--documenter-dark .textarea:not([rows]) { + max-height: 600px; + min-height: 120px; } + html.theme--documenter-dark .textarea[rows] { + height: initial; } + html.theme--documenter-dark .textarea.has-fixed-size { + resize: none; } + html.theme--documenter-dark .checkbox, html.theme--documenter-dark .radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .checkbox input, html.theme--documenter-dark .radio input { + cursor: pointer; } + html.theme--documenter-dark .checkbox:hover, html.theme--documenter-dark .radio:hover { + color: #8c9b9d; } + html.theme--documenter-dark .checkbox[disabled], html.theme--documenter-dark .radio[disabled], + fieldset[disabled] html.theme--documenter-dark .checkbox, + fieldset[disabled] html.theme--documenter-dark .radio { + color: white; + cursor: not-allowed; } + html.theme--documenter-dark .radio + .radio { + margin-left: 0.5em; } + html.theme--documenter-dark .select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; } + html.theme--documenter-dark .select:not(.is-multiple) { + height: 2.25em; } + html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border-color: #1abc9c; + right: 1.125em; + z-index: 4; } + html.theme--documenter-dark .select.is-rounded select, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select select { + border-radius: 290486px; + padding-left: 1em; } + html.theme--documenter-dark .select select { + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; } + html.theme--documenter-dark .select select::-ms-expand { + display: none; } + html.theme--documenter-dark .select select[disabled]:hover, + fieldset[disabled] html.theme--documenter-dark .select select:hover { + border-color: #282f2f; } + html.theme--documenter-dark .select select:not([multiple]) { + padding-right: 2.5em; } + html.theme--documenter-dark .select select[multiple] { + height: auto; + padding: 0; } + html.theme--documenter-dark .select select[multiple] option { + padding: 0.5em 1em; } + html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #8c9b9d; } + html.theme--documenter-dark .select.is-white:not(:hover)::after { + border-color: white; } + html.theme--documenter-dark .select.is-white select { + border-color: white; } + html.theme--documenter-dark .select.is-white select:hover, html.theme--documenter-dark .select.is-white select.is-hovered { + border-color: #f2f2f2; } + html.theme--documenter-dark .select.is-white select:focus, html.theme--documenter-dark .select.is-white select.is-focused, html.theme--documenter-dark .select.is-white select:active, html.theme--documenter-dark .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .select.is-black:not(:hover)::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .select.is-black select { + border-color: #0a0a0a; } + html.theme--documenter-dark .select.is-black select:hover, html.theme--documenter-dark .select.is-black select.is-hovered { + border-color: black; } + html.theme--documenter-dark .select.is-black select:focus, html.theme--documenter-dark .select.is-black select.is-focused, html.theme--documenter-dark .select.is-black select:active, html.theme--documenter-dark .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .select.is-light:not(:hover)::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .select.is-light select { + border-color: #ecf0f1; } + html.theme--documenter-dark .select.is-light select:hover, html.theme--documenter-dark .select.is-light select.is-hovered { + border-color: #dde4e6; } + html.theme--documenter-dark .select.is-light select:focus, html.theme--documenter-dark .select.is-light select.is-focused, html.theme--documenter-dark .select.is-light select:active, html.theme--documenter-dark .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .select.is-dark:not(:hover)::after, html.theme--documenter-dark .content kbd.select:not(:hover)::after { + border-color: #282f2f; } + html.theme--documenter-dark .select.is-dark select, html.theme--documenter-dark .content kbd.select select { + border-color: #282f2f; } + html.theme--documenter-dark .select.is-dark select:hover, html.theme--documenter-dark .content kbd.select select:hover, html.theme--documenter-dark .select.is-dark select.is-hovered, html.theme--documenter-dark .content kbd.select select.is-hovered { + border-color: #1d2122; } + html.theme--documenter-dark .select.is-dark select:focus, html.theme--documenter-dark .content kbd.select select:focus, html.theme--documenter-dark .select.is-dark select.is-focused, html.theme--documenter-dark .content kbd.select select.is-focused, html.theme--documenter-dark .select.is-dark select:active, html.theme--documenter-dark .content kbd.select select:active, html.theme--documenter-dark .select.is-dark select.is-active, html.theme--documenter-dark .content kbd.select select.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .select.is-primary:not(:hover)::after, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink:not(:hover)::after { + border-color: #375a7f; } + html.theme--documenter-dark .select.is-primary select, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select { + border-color: #375a7f; } + html.theme--documenter-dark .select.is-primary select:hover, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:hover, html.theme--documenter-dark .select.is-primary select.is-hovered, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-hovered { + border-color: #2f4d6d; } + html.theme--documenter-dark .select.is-primary select:focus, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:focus, html.theme--documenter-dark .select.is-primary select.is-focused, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-focused, html.theme--documenter-dark .select.is-primary select:active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:active, html.theme--documenter-dark .select.is-primary select.is-active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-active { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .select.is-link:not(:hover)::after { + border-color: #1abc9c; } + html.theme--documenter-dark .select.is-link select { + border-color: #1abc9c; } + html.theme--documenter-dark .select.is-link select:hover, html.theme--documenter-dark .select.is-link select.is-hovered { + border-color: #17a689; } + html.theme--documenter-dark .select.is-link select:focus, html.theme--documenter-dark .select.is-link select.is-focused, html.theme--documenter-dark .select.is-link select:active, html.theme--documenter-dark .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select.is-info:not(:hover)::after { + border-color: #024c7d; } + html.theme--documenter-dark .select.is-info select { + border-color: #024c7d; } + html.theme--documenter-dark .select.is-info select:hover, html.theme--documenter-dark .select.is-info select.is-hovered { + border-color: #023d64; } + html.theme--documenter-dark .select.is-info select:focus, html.theme--documenter-dark .select.is-info select.is-focused, html.theme--documenter-dark .select.is-info select:active, html.theme--documenter-dark .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .select.is-success:not(:hover)::after { + border-color: #008438; } + html.theme--documenter-dark .select.is-success select { + border-color: #008438; } + html.theme--documenter-dark .select.is-success select:hover, html.theme--documenter-dark .select.is-success select.is-hovered { + border-color: #006b2d; } + html.theme--documenter-dark .select.is-success select:focus, html.theme--documenter-dark .select.is-success select.is-focused, html.theme--documenter-dark .select.is-success select:active, html.theme--documenter-dark .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .select.is-warning:not(:hover)::after { + border-color: #ad8100; } + html.theme--documenter-dark .select.is-warning select { + border-color: #ad8100; } + html.theme--documenter-dark .select.is-warning select:hover, html.theme--documenter-dark .select.is-warning select.is-hovered { + border-color: #946e00; } + html.theme--documenter-dark .select.is-warning select:focus, html.theme--documenter-dark .select.is-warning select.is-focused, html.theme--documenter-dark .select.is-warning select:active, html.theme--documenter-dark .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .select.is-danger:not(:hover)::after { + border-color: #9e1b0d; } + html.theme--documenter-dark .select.is-danger select { + border-color: #9e1b0d; } + html.theme--documenter-dark .select.is-danger select:hover, html.theme--documenter-dark .select.is-danger select.is-hovered { + border-color: #86170b; } + html.theme--documenter-dark .select.is-danger select:focus, html.theme--documenter-dark .select.is-danger select.is-focused, html.theme--documenter-dark .select.is-danger select:active, html.theme--documenter-dark .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .select.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .select.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .select.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .select.is-disabled::after { + border-color: white; } + html.theme--documenter-dark .select.is-fullwidth { + width: 100%; } + html.theme--documenter-dark .select.is-fullwidth select { + width: 100%; } + html.theme--documenter-dark .select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + transform: none; } + html.theme--documenter-dark .select.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { + font-size: 0.85em; } + html.theme--documenter-dark .select.is-loading.is-medium:after { + font-size: 1.25rem; } + html.theme--documenter-dark .select.is-loading.is-large:after { + font-size: 1.5rem; } + html.theme--documenter-dark .file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; } + html.theme--documenter-dark .file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:hover .file-cta, html.theme--documenter-dark .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:focus .file-cta, html.theme--documenter-dark .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:active .file-cta, html.theme--documenter-dark .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-black:hover .file-cta, html.theme--documenter-dark .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-black:focus .file-cta, html.theme--documenter-dark .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; } + html.theme--documenter-dark .file.is-black:active .file-cta, html.theme--documenter-dark .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-light .file-cta { + background-color: #ecf0f1; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-light:hover .file-cta, html.theme--documenter-dark .file.is-light.is-hovered .file-cta { + background-color: #e5eaec; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-light:focus .file-cta, html.theme--documenter-dark .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(236, 240, 241, 0.25); + color: #282f2f; } + html.theme--documenter-dark .file.is-light:active .file-cta, html.theme--documenter-dark .file.is-light.is-active .file-cta { + background-color: #dde4e6; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-dark .file-cta, html.theme--documenter-dark .content kbd.file .file-cta { + background-color: #282f2f; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:hover .file-cta, html.theme--documenter-dark .content kbd.file:hover .file-cta, html.theme--documenter-dark .file.is-dark.is-hovered .file-cta, html.theme--documenter-dark .content kbd.file.is-hovered .file-cta { + background-color: #232829; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:focus .file-cta, html.theme--documenter-dark .content kbd.file:focus .file-cta, html.theme--documenter-dark .file.is-dark.is-focused .file-cta, html.theme--documenter-dark .content kbd.file.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(40, 47, 47, 0.25); + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:active .file-cta, html.theme--documenter-dark .content kbd.file:active .file-cta, html.theme--documenter-dark .file.is-dark.is-active .file-cta, html.theme--documenter-dark .content kbd.file.is-active .file-cta { + background-color: #1d2122; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-primary .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink .file-cta { + background-color: #375a7f; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-primary:hover .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:hover .file-cta, html.theme--documenter-dark .file.is-primary.is-hovered .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { + background-color: #335476; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-primary:focus .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:focus .file-cta, html.theme--documenter-dark .file.is-primary.is-focused .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(55, 90, 127, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-primary:active .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:active .file-cta, html.theme--documenter-dark .file.is-primary.is-active .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-active.docs-sourcelink .file-cta { + background-color: #2f4d6d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link .file-cta { + background-color: #1abc9c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link:hover .file-cta, html.theme--documenter-dark .file.is-link.is-hovered .file-cta { + background-color: #18b193; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link:focus .file-cta, html.theme--documenter-dark .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(26, 188, 156, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-link:active .file-cta, html.theme--documenter-dark .file.is-link.is-active .file-cta { + background-color: #17a689; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info .file-cta { + background-color: #024c7d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info:hover .file-cta, html.theme--documenter-dark .file.is-info.is-hovered .file-cta { + background-color: #024470; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info:focus .file-cta, html.theme--documenter-dark .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(2, 76, 125, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-info:active .file-cta, html.theme--documenter-dark .file.is-info.is-active .file-cta { + background-color: #023d64; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success .file-cta { + background-color: #008438; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success:hover .file-cta, html.theme--documenter-dark .file.is-success.is-hovered .file-cta { + background-color: #007733; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success:focus .file-cta, html.theme--documenter-dark .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(0, 132, 56, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-success:active .file-cta, html.theme--documenter-dark .file.is-success.is-active .file-cta { + background-color: #006b2d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning .file-cta { + background-color: #ad8100; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning:hover .file-cta, html.theme--documenter-dark .file.is-warning.is-hovered .file-cta { + background-color: #a07700; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning:focus .file-cta, html.theme--documenter-dark .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(173, 129, 0, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-warning:active .file-cta, html.theme--documenter-dark .file.is-warning.is-active .file-cta { + background-color: #946e00; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger .file-cta { + background-color: #9e1b0d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger:hover .file-cta, html.theme--documenter-dark .file.is-danger.is-hovered .file-cta { + background-color: #92190c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger:focus .file-cta, html.theme--documenter-dark .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(158, 27, 13, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-danger:active .file-cta, html.theme--documenter-dark .file.is-danger.is-active .file-cta { + background-color: #86170b; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file { + font-size: 0.85em; } + html.theme--documenter-dark .file.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .file.is-medium .file-icon .fa { + font-size: 21px; } + html.theme--documenter-dark .file.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .file.is-large .file-icon .fa { + font-size: 28px; } + html.theme--documenter-dark .file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .file.has-name.is-empty .file-cta { + border-radius: 0.4em; } + html.theme--documenter-dark .file.has-name.is-empty .file-name { + display: none; } + html.theme--documenter-dark .file.is-boxed .file-label { + flex-direction: column; } + html.theme--documenter-dark .file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; } + html.theme--documenter-dark .file.is-boxed .file-name { + border-width: 0 1px 1px; } + html.theme--documenter-dark .file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; } + html.theme--documenter-dark .file.is-boxed .file-icon .fa { + font-size: 21px; } + html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { + font-size: 14px; } + html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; } + html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa { + font-size: 35px; } + html.theme--documenter-dark .file.is-boxed.has-name .file-cta { + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .file.is-boxed.has-name .file-name { + border-radius: 0 0 0.4em 0.4em; + border-width: 0 1px 1px; } + html.theme--documenter-dark .file.is-centered { + justify-content: center; } + html.theme--documenter-dark .file.is-fullwidth .file-label { + width: 100%; } + html.theme--documenter-dark .file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; } + html.theme--documenter-dark .file.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .file.is-right .file-cta { + border-radius: 0 0.4em 0.4em 0; } + html.theme--documenter-dark .file.is-right .file-name { + border-radius: 0.4em 0 0 0.4em; + border-width: 1px 0 1px 1px; + order: -1; } + html.theme--documenter-dark .file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; } + html.theme--documenter-dark .file-label:hover .file-cta { + background-color: #e5eaec; + color: #282f2f; } + html.theme--documenter-dark .file-label:hover .file-name { + border-color: #596668; } + html.theme--documenter-dark .file-label:active .file-cta { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .file-label:active .file-name { + border-color: #535f61; } + html.theme--documenter-dark .file-input { + height: 100%; + left: 0; + opacity: 0; + outline: none; + position: absolute; + top: 0; + width: 100%; } + html.theme--documenter-dark .file-cta, + html.theme--documenter-dark .file-name { + border-color: #5e6d6f; + border-radius: 0.4em; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; } + html.theme--documenter-dark .file-cta { + background-color: #ecf0f1; + color: #343c3d; } + html.theme--documenter-dark .file-name { + border-color: #5e6d6f; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; } + html.theme--documenter-dark .file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; } + html.theme--documenter-dark .file-icon .fa { + font-size: 14px; } + html.theme--documenter-dark .label { + color: #282f2f; + display: block; + font-size: 15px; + font-weight: 700; } + html.theme--documenter-dark .label:not(:last-child) { + margin-bottom: 0.5em; } + html.theme--documenter-dark .label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.label { + font-size: 0.85em; } + html.theme--documenter-dark .label.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .label.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .help { + display: block; + font-size: 0.85em; + margin-top: 0.25rem; } + html.theme--documenter-dark .help.is-white { + color: white; } + html.theme--documenter-dark .help.is-black { + color: #0a0a0a; } + html.theme--documenter-dark .help.is-light { + color: #ecf0f1; } + html.theme--documenter-dark .help.is-dark, html.theme--documenter-dark .content kbd.help { + color: #282f2f; } + html.theme--documenter-dark .help.is-primary, html.theme--documenter-dark .docstring > section > a.help.docs-sourcelink { + color: #375a7f; } + html.theme--documenter-dark .help.is-link { + color: #1abc9c; } + html.theme--documenter-dark .help.is-info { + color: #024c7d; } + html.theme--documenter-dark .help.is-success { + color: #008438; } + html.theme--documenter-dark .help.is-warning { + color: #ad8100; } + html.theme--documenter-dark .help.is-danger { + color: #9e1b0d; } + html.theme--documenter-dark .field:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .field.has-addons { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.has-addons .control:not(:last-child) { + margin-right: -1px; } + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; } + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-hovered { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active:hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + html.theme--documenter-dark .field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.is-grouped.is-grouped-centered { + justify-content: center; } + html.theme--documenter-dark .field.is-grouped.is-grouped-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:last-child, html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field.is-horizontal { + display: flex; } } + html.theme--documenter-dark .field-label .label { + font-size: inherit; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .field-label { + margin-bottom: 0.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; } + html.theme--documenter-dark .field-label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.field-label { + font-size: 0.85em; + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-normal { + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; } } + html.theme--documenter-dark .field-body .field .field { + margin-bottom: 0; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; } + html.theme--documenter-dark .field-body .field { + margin-bottom: 0; } + html.theme--documenter-dark .field-body > .field { + flex-shrink: 1; } + html.theme--documenter-dark .field-body > .field:not(.is-narrow) { + flex-grow: 1; } + html.theme--documenter-dark .field-body > .field:not(:last-child) { + margin-right: 0.75rem; } } + html.theme--documenter-dark .control { + box-sizing: border-box; + clear: both; + font-size: 15px; + position: relative; + text-align: left; } + html.theme--documenter-dark .control.has-icons-left .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select:focus ~ .icon { + color: #5e6d6f; } + html.theme--documenter-dark .control.has-icons-left .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-small ~ .icon, + html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon, + html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { + font-size: 0.85em; } + html.theme--documenter-dark .control.has-icons-left .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; } + html.theme--documenter-dark .control.has-icons-left .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; } + html.theme--documenter-dark .control.has-icons-left .icon, html.theme--documenter-dark .control.has-icons-right .icon { + color: #dbdee0; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + html.theme--documenter-dark .control.has-icons-left .input, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, + html.theme--documenter-dark .control.has-icons-left .select select { + padding-left: 2.25em; } + html.theme--documenter-dark .control.has-icons-left .icon.is-left { + left: 0; } + html.theme--documenter-dark .control.has-icons-right .input, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, + html.theme--documenter-dark .control.has-icons-right .select select { + padding-right: 2.25em; } + html.theme--documenter-dark .control.has-icons-right .icon.is-right { + right: 0; } + html.theme--documenter-dark .control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; } + html.theme--documenter-dark .control.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { + font-size: 0.85em; } + html.theme--documenter-dark .control.is-loading.is-medium:after { + font-size: 1.25rem; } + html.theme--documenter-dark .control.is-loading.is-large:after { + font-size: 1.5rem; } + html.theme--documenter-dark .breadcrumb { + font-size: 15px; + white-space: nowrap; } + html.theme--documenter-dark .breadcrumb a { + align-items: center; + color: #1abc9c; + display: flex; + justify-content: center; + padding: 0 0.75em; } + html.theme--documenter-dark .breadcrumb a:hover { + color: #1dd2af; } + html.theme--documenter-dark .breadcrumb li { + align-items: center; + display: flex; } + html.theme--documenter-dark .breadcrumb li:first-child a { + padding-left: 0; } + html.theme--documenter-dark .breadcrumb li.is-active a { + color: #f2f2f2; + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb li + li::before { + color: #8c9b9d; + content: "\0002f"; } + html.theme--documenter-dark .breadcrumb ul, + html.theme--documenter-dark .breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .breadcrumb .icon:first-child { + margin-right: 0.5em; } + html.theme--documenter-dark .breadcrumb .icon:last-child { + margin-left: 0.5em; } + html.theme--documenter-dark .breadcrumb.is-centered ol, + html.theme--documenter-dark .breadcrumb.is-centered ul { + justify-content: center; } + html.theme--documenter-dark .breadcrumb.is-right ol, + html.theme--documenter-dark .breadcrumb.is-right ul { + justify-content: flex-end; } + html.theme--documenter-dark .breadcrumb.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.breadcrumb { + font-size: 0.85em; } + html.theme--documenter-dark .breadcrumb.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .breadcrumb.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; } + html.theme--documenter-dark .breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; } + html.theme--documenter-dark .breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; } + html.theme--documenter-dark .breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; } + html.theme--documenter-dark .card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #fff; + max-width: 100%; + position: relative; } + html.theme--documenter-dark .card-header { + background-color: transparent; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; } + html.theme--documenter-dark .card-header-title { + align-items: center; + color: #f2f2f2; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; } + html.theme--documenter-dark .card-header-title.is-centered { + justify-content: center; } + html.theme--documenter-dark .card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; } + html.theme--documenter-dark .card-image { + display: block; + position: relative; } + html.theme--documenter-dark .card-content { + background-color: transparent; + padding: 1rem 1.25rem; } + html.theme--documenter-dark .card-footer { + background-color: transparent; + border-top: 1px solid #5e6d6f; + align-items: stretch; + display: flex; } + html.theme--documenter-dark .card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; } + html.theme--documenter-dark .card-footer-item:not(:last-child) { + border-right: 1px solid #5e6d6f; } + html.theme--documenter-dark .card .media:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .dropdown { + display: inline-flex; + position: relative; + vertical-align: top; } + html.theme--documenter-dark .dropdown.is-active .dropdown-menu, html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu { + display: block; } + html.theme--documenter-dark .dropdown.is-right .dropdown-menu { + left: auto; + right: 0; } + html.theme--documenter-dark .dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; } + html.theme--documenter-dark .dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; } + html.theme--documenter-dark .dropdown-content { + background-color: #282f2f; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + html.theme--documenter-dark .dropdown-item { + color: #fff; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; } + html.theme--documenter-dark a.dropdown-item, + html.theme--documenter-dark button.dropdown-item { + padding-right: 3rem; + text-align: left; + white-space: nowrap; + width: 100%; } + html.theme--documenter-dark a.dropdown-item:hover, + html.theme--documenter-dark button.dropdown-item:hover { + background-color: #282f2f; + color: #0a0a0a; } + html.theme--documenter-dark a.dropdown-item.is-active, + html.theme--documenter-dark button.dropdown-item.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .dropdown-divider { + background-color: #5e6d6f; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; } + html.theme--documenter-dark .level { + align-items: center; + justify-content: space-between; } + html.theme--documenter-dark .level code { + border-radius: 0.4em; } + html.theme--documenter-dark .level img { + display: inline-block; + vertical-align: top; } + html.theme--documenter-dark .level.is-mobile { + display: flex; } + html.theme--documenter-dark .level.is-mobile .level-left, + html.theme--documenter-dark .level.is-mobile .level-right { + display: flex; } + html.theme--documenter-dark .level.is-mobile .level-left + .level-right { + margin-top: 0; } + html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level { + display: flex; } + html.theme--documenter-dark .level > .level-item:not(.is-narrow) { + flex-grow: 1; } } + html.theme--documenter-dark .level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; } + html.theme--documenter-dark .level-item .title, + html.theme--documenter-dark .level-item .subtitle { + margin-bottom: 0; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .level-item:not(:last-child) { + margin-bottom: 0.75rem; } } + html.theme--documenter-dark .level-left, + html.theme--documenter-dark .level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .level-left .level-item.is-flexible, + html.theme--documenter-dark .level-right .level-item.is-flexible { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-left .level-item:not(:last-child), + html.theme--documenter-dark .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; } } + html.theme--documenter-dark .level-left { + align-items: center; + justify-content: flex-start; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .level-left + .level-right { + margin-top: 1.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-left { + display: flex; } } + html.theme--documenter-dark .level-right { + align-items: center; + justify-content: flex-end; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-right { + display: flex; } } + html.theme--documenter-dark .list { + background-color: white; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .list-item { + display: block; + padding: 0.5em 1em; } + html.theme--documenter-dark .list-item:not(a) { + color: #fff; } + html.theme--documenter-dark .list-item:first-child { + border-top-left-radius: 0.4em; + border-top-right-radius: 0.4em; } + html.theme--documenter-dark .list-item:last-child { + border-bottom-left-radius: 0.4em; + border-bottom-right-radius: 0.4em; } + html.theme--documenter-dark .list-item:not(:last-child) { + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .list-item.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark a.list-item { + background-color: #282f2f; + cursor: pointer; } + html.theme--documenter-dark .media { + align-items: flex-start; + display: flex; + text-align: left; } + html.theme--documenter-dark .media .content:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .media .media { + border-top: 1px solid rgba(94, 109, 111, 0.5); + display: flex; + padding-top: 0.75rem; } + html.theme--documenter-dark .media .media .content:not(:last-child), + html.theme--documenter-dark .media .media .control:not(:last-child) { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .media .media .media { + padding-top: 0.5rem; } + html.theme--documenter-dark .media .media .media + .media { + margin-top: 0.5rem; } + html.theme--documenter-dark .media + .media { + border-top: 1px solid rgba(94, 109, 111, 0.5); + margin-top: 1rem; + padding-top: 1rem; } + html.theme--documenter-dark .media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; } + html.theme--documenter-dark .media-left, + html.theme--documenter-dark .media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .media-left { + margin-right: 1rem; } + html.theme--documenter-dark .media-right { + margin-left: 1rem; } + html.theme--documenter-dark .media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .media-content { + overflow-x: auto; } } + html.theme--documenter-dark .menu { + font-size: 15px; } + html.theme--documenter-dark .menu.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.menu { + font-size: 0.85em; } + html.theme--documenter-dark .menu.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .menu.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .menu-list { + line-height: 1.25; } + html.theme--documenter-dark .menu-list a { + border-radius: 3px; + color: #fff; + display: block; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .menu-list a:hover { + background-color: #282f2f; + color: #f2f2f2; } + html.theme--documenter-dark .menu-list a.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .menu-list li ul { + border-left: 1px solid #5e6d6f; + margin: 0.75em; + padding-left: 0.75em; } + html.theme--documenter-dark .menu-label { + color: white; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; } + html.theme--documenter-dark .menu-label:not(:first-child) { + margin-top: 1em; } + html.theme--documenter-dark .menu-label:not(:last-child) { + margin-bottom: 1em; } + html.theme--documenter-dark .message { + background-color: #282f2f; + border-radius: 0.4em; + font-size: 15px; } + html.theme--documenter-dark .message strong { + color: currentColor; } + html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + html.theme--documenter-dark .message.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.message { + font-size: 0.85em; } + html.theme--documenter-dark .message.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .message.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .message.is-white { + background-color: white; } + html.theme--documenter-dark .message.is-white .message-header { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .message.is-white .message-body { + border-color: white; + color: #4d4d4d; } + html.theme--documenter-dark .message.is-black { + background-color: #fafafa; } + html.theme--documenter-dark .message.is-black .message-header { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; } + html.theme--documenter-dark .message.is-light { + background-color: #f9fafb; } + html.theme--documenter-dark .message.is-light .message-header { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .message.is-light .message-body { + border-color: #ecf0f1; + color: #505050; } + html.theme--documenter-dark .message.is-dark, html.theme--documenter-dark .content kbd.message { + background-color: #f9fafa; } + html.theme--documenter-dark .message.is-dark .message-header, html.theme--documenter-dark .content kbd.message .message-header { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .message.is-dark .message-body, html.theme--documenter-dark .content kbd.message .message-body { + border-color: #282f2f; + color: #212526; } + html.theme--documenter-dark .message.is-primary, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink { + background-color: #f8fafc; } + html.theme--documenter-dark .message.is-primary .message-header, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-header { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .message.is-primary .message-body, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-body { + border-color: #375a7f; + color: #2b4159; } + html.theme--documenter-dark .message.is-link { + background-color: #f6fefc; } + html.theme--documenter-dark .message.is-link .message-header { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .message.is-link .message-body { + border-color: #1abc9c; + color: #0b2f28; } + html.theme--documenter-dark .message.is-info { + background-color: #f5fbff; } + html.theme--documenter-dark .message.is-info .message-header { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .message.is-info .message-body { + border-color: #024c7d; + color: #033659; } + html.theme--documenter-dark .message.is-success { + background-color: #f5fff9; } + html.theme--documenter-dark .message.is-success .message-header { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .message.is-success .message-body { + border-color: #008438; + color: #023518; } + html.theme--documenter-dark .message.is-warning { + background-color: #fffcf5; } + html.theme--documenter-dark .message.is-warning .message-header { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .message.is-warning .message-body { + border-color: #ad8100; + color: #3d2e03; } + html.theme--documenter-dark .message.is-danger { + background-color: #fef6f6; } + html.theme--documenter-dark .message.is-danger .message-header { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .message.is-danger .message-body { + border-color: #9e1b0d; + color: #7a170c; } + html.theme--documenter-dark .message-header { + align-items: center; + background-color: #fff; + border-radius: 0.4em 0.4em 0 0; + color: rgba(0, 0, 0, 0.7); + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + html.theme--documenter-dark .message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; } + html.theme--documenter-dark .message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .message-body { + border-color: #5e6d6f; + border-radius: 0.4em; + border-style: solid; + border-width: 0 0 0 4px; + color: #fff; + padding: 1em 1.25em; } + html.theme--documenter-dark .message-body code, + html.theme--documenter-dark .message-body pre { + background-color: white; } + html.theme--documenter-dark .message-body pre code { + background-color: transparent; } + html.theme--documenter-dark .modal { + align-items: center; + display: none; + flex-direction: column; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; } + html.theme--documenter-dark .modal.is-active { + display: flex; } + html.theme--documenter-dark .modal-background { + background-color: rgba(10, 10, 10, 0.86); } + html.theme--documenter-dark .modal-content, + html.theme--documenter-dark .modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .modal-content, + html.theme--documenter-dark .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; } } + html.theme--documenter-dark .modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; } + html.theme--documenter-dark .modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; + -ms-overflow-y: visible; } + html.theme--documenter-dark .modal-card-head, + html.theme--documenter-dark .modal-card-foot { + align-items: center; + background-color: #282f2f; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; } + html.theme--documenter-dark .modal-card-head { + border-bottom: 1px solid #5e6d6f; + border-top-left-radius: 8px; + border-top-right-radius: 8px; } + html.theme--documenter-dark .modal-card-title { + color: #f2f2f2; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; } + html.theme--documenter-dark .modal-card-foot { + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark .modal-card-foot .button:not(:last-child) { + margin-right: 0.5em; } + html.theme--documenter-dark .modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; } + html.theme--documenter-dark .navbar { + background-color: #375a7f; + min-height: 4rem; + position: relative; + z-index: 30; } + html.theme--documenter-dark .navbar.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-burger { + color: #0a0a0a; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-white .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; } } + html.theme--documenter-dark .navbar.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link { + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-burger { + color: white; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-black .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link { + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; } } + html.theme--documenter-dark .navbar.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link { + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after { + border-color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-burger { + color: #282f2f; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-light .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link { + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after { + border-color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: #ecf0f1; + color: #282f2f; } } + html.theme--documenter-dark .navbar.is-dark, html.theme--documenter-dark .content kbd.navbar { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link { + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-burger, html.theme--documenter-dark .content kbd.navbar .navbar-burger { + color: #ecf0f1; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-dark .navbar-start > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-end > .navbar-item, + html.theme--documenter-dark .content kbd.navbar .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link { + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { + background-color: #282f2f; + color: #ecf0f1; } } + html.theme--documenter-dark .navbar.is-primary, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-burger, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-primary .navbar-start > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-end > .navbar-item, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #375a7f; + color: #fff; } } + html.theme--documenter-dark .navbar.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-link .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #1abc9c; + color: #fff; } } + html.theme--documenter-dark .navbar.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-info .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #024c7d; + color: #fff; } } + html.theme--documenter-dark .navbar.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-success .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #008438; + color: #fff; } } + html.theme--documenter-dark .navbar.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-warning .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ad8100; + color: #fff; } } + html.theme--documenter-dark .navbar.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-danger .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #9e1b0d; + color: #fff; } } + html.theme--documenter-dark .navbar > .container { + align-items: stretch; + display: flex; + min-height: 4rem; + width: 100%; } + html.theme--documenter-dark .navbar.has-shadow { + box-shadow: 0 2px 0 0 #282f2f; } + html.theme--documenter-dark .navbar.is-fixed-bottom, html.theme--documenter-dark .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 #282f2f; } + html.theme--documenter-dark .navbar.is-fixed-top { + top: 0; } + html.theme--documenter-dark html.has-navbar-fixed-top, + html.theme--documenter-dark body.has-navbar-fixed-top { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom, + html.theme--documenter-dark body.has-navbar-fixed-bottom { + padding-bottom: 4rem; } + html.theme--documenter-dark .navbar-brand, + html.theme--documenter-dark .navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 4rem; } + html.theme--documenter-dark .navbar-brand a.navbar-item:focus, html.theme--documenter-dark .navbar-brand a.navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; } + html.theme--documenter-dark .navbar-burger { + color: #fff; + cursor: pointer; + display: block; + height: 4rem; + position: relative; + width: 4rem; + margin-left: auto; } + html.theme--documenter-dark .navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, transform; + transition-timing-function: ease-out; + width: 16px; } + html.theme--documenter-dark .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); } + html.theme--documenter-dark .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); } + html.theme--documenter-dark .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); } + html.theme--documenter-dark .navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1) { + transform: translateY(5px) rotate(45deg); } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2) { + opacity: 0; } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3) { + transform: translateY(-5px) rotate(-45deg); } + html.theme--documenter-dark .navbar-menu { + display: none; } + html.theme--documenter-dark .navbar-item, + html.theme--documenter-dark .navbar-link { + color: #fff; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .navbar-item .icon:only-child, + html.theme--documenter-dark .navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; } + html.theme--documenter-dark a.navbar-item, + html.theme--documenter-dark .navbar-link { + cursor: pointer; } + html.theme--documenter-dark a.navbar-item:focus, html.theme--documenter-dark a.navbar-item:focus-within, html.theme--documenter-dark a.navbar-item:hover, html.theme--documenter-dark a.navbar-item.is-active, + html.theme--documenter-dark .navbar-link:focus, + html.theme--documenter-dark .navbar-link:focus-within, + html.theme--documenter-dark .navbar-link:hover, + html.theme--documenter-dark .navbar-link.is-active { + background-color: transparent; + color: #1abc9c; } + html.theme--documenter-dark .navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .navbar-item img { + max-height: 1.75rem; } + html.theme--documenter-dark .navbar-item.has-dropdown { + padding: 0; } + html.theme--documenter-dark .navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 4rem; + padding-bottom: calc(0.5rem - 1px); } + html.theme--documenter-dark .navbar-item.is-tab:focus, html.theme--documenter-dark .navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #1abc9c; } + html.theme--documenter-dark .navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #1abc9c; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #1abc9c; + padding-bottom: calc(0.5rem - 3px); } + html.theme--documenter-dark .navbar-content { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .navbar-link:not(.is-arrowless) { + padding-right: 2.5em; } + html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after { + border-color: #fff; + margin-top: -0.375em; + right: 1.125em; } + html.theme--documenter-dark .navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + html.theme--documenter-dark .navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; } + html.theme--documenter-dark .navbar-divider { + background-color: rgba(0, 0, 0, 0.2); + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .navbar > .container { + display: block; } + html.theme--documenter-dark .navbar-brand .navbar-item, + html.theme--documenter-dark .navbar-tabs .navbar-item { + align-items: center; + display: flex; } + html.theme--documenter-dark .navbar-link::after { + display: none; } + html.theme--documenter-dark .navbar-menu { + background-color: #375a7f; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; } + html.theme--documenter-dark .navbar-menu.is-active { + display: block; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch, html.theme--documenter-dark .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .navbar.is-fixed-top-touch { + top: 0; } + html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu, html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 4rem); + overflow: auto; } + html.theme--documenter-dark html.has-navbar-fixed-top-touch, + html.theme--documenter-dark body.has-navbar-fixed-top-touch { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom-touch, + html.theme--documenter-dark body.has-navbar-fixed-bottom-touch { + padding-bottom: 4rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar, + html.theme--documenter-dark .navbar-menu, + html.theme--documenter-dark .navbar-start, + html.theme--documenter-dark .navbar-end { + align-items: stretch; + display: flex; } + html.theme--documenter-dark .navbar { + min-height: 4rem; } + html.theme--documenter-dark .navbar.is-spaced { + padding: 1rem 2rem; } + html.theme--documenter-dark .navbar.is-spaced .navbar-start, + html.theme--documenter-dark .navbar.is-spaced .navbar-end { + align-items: center; } + html.theme--documenter-dark .navbar.is-spaced a.navbar-item, + html.theme--documenter-dark .navbar.is-spaced .navbar-link { + border-radius: 0.4em; } + html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover, html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus, + html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover, + html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; } + html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; } + html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: transparent; + color: #dbdee0; } + html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: transparent; + color: #1abc9c; } + html.theme--documenter-dark .navbar-burger { + display: none; } + html.theme--documenter-dark .navbar-item, + html.theme--documenter-dark .navbar-link { + align-items: center; + display: flex; } + html.theme--documenter-dark .navbar-item { + display: flex; } + html.theme--documenter-dark .navbar-item.has-dropdown { + align-items: stretch; } + html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after { + transform: rotate(135deg) translate(0.25em, -0.25em); } + html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 8px 8px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; } + html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; } + .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + transform: translateY(0); } + html.theme--documenter-dark .navbar-menu { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .navbar-start { + justify-content: flex-start; + margin-right: auto; } + html.theme--documenter-dark .navbar-end { + justify-content: flex-end; + margin-left: auto; } + html.theme--documenter-dark .navbar-dropdown { + background-color: #375a7f; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-top: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; } + html.theme--documenter-dark .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item { + padding-right: 3rem; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover { + background-color: transparent; + color: #dbdee0; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active { + background-color: transparent; + color: #1abc9c; } + .navbar.is-spaced html.theme--documenter-dark .navbar-dropdown, html.theme--documenter-dark .navbar-dropdown.is-boxed { + border-radius: 8px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, transform; } + html.theme--documenter-dark .navbar-dropdown.is-right { + left: auto; + right: 0; } + html.theme--documenter-dark .navbar-divider { + display: block; } + html.theme--documenter-dark .navbar > .container .navbar-brand, + html.theme--documenter-dark .container > .navbar .navbar-brand { + margin-left: -.75rem; } + html.theme--documenter-dark .navbar > .container .navbar-menu, + html.theme--documenter-dark .container > .navbar .navbar-menu { + margin-right: -.75rem; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop, html.theme--documenter-dark .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .navbar.is-fixed-top-desktop { + top: 0; } + html.theme--documenter-dark html.has-navbar-fixed-top-desktop, + html.theme--documenter-dark body.has-navbar-fixed-top-desktop { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop, + html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop { + padding-bottom: 4rem; } + html.theme--documenter-dark html.has-spaced-navbar-fixed-top, + html.theme--documenter-dark body.has-spaced-navbar-fixed-top { + padding-top: 6rem; } + html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom, + html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom { + padding-bottom: 6rem; } + html.theme--documenter-dark a.navbar-item.is-active, + html.theme--documenter-dark .navbar-link.is-active { + color: #1abc9c; } + html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover), + html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover) { + background-color: transparent; } + html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link { + background-color: transparent; } } + html.theme--documenter-dark .hero.is-fullheight-with-navbar { + min-height: calc(100vh - 4rem); } + html.theme--documenter-dark .pagination { + font-size: 15px; + margin: -0.25rem; } + html.theme--documenter-dark .pagination.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination { + font-size: 0.85em; } + html.theme--documenter-dark .pagination.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .pagination.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .pagination.is-rounded .pagination-previous, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, + html.theme--documenter-dark .pagination.is-rounded .pagination-next, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; } + html.theme--documenter-dark .pagination.is-rounded .pagination-link, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { + border-radius: 290486px; } + html.theme--documenter-dark .pagination, + html.theme--documenter-dark .pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-ellipsis { + font-size: 1em; + justify-content: center; + margin: 0.25rem; + padding-left: 0.5em; + padding-right: 0.5em; + text-align: center; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-link { + border-color: #5e6d6f; + color: #1abc9c; + min-width: 2.25em; } + html.theme--documenter-dark .pagination-previous:hover, + html.theme--documenter-dark .pagination-next:hover, + html.theme--documenter-dark .pagination-link:hover { + border-color: #8c9b9d; + color: #1dd2af; } + html.theme--documenter-dark .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus { + border-color: #8c9b9d; } + html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled] { + background-color: #dbdee0; + border-color: #dbdee0; + box-shadow: none; + color: #5e6d6f; + opacity: 0.5; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + html.theme--documenter-dark .pagination-link.is-current { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .pagination-ellipsis { + color: #8c9b9d; + pointer-events: none; } + html.theme--documenter-dark .pagination-list { + flex-wrap: wrap; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .pagination { + flex-wrap: wrap; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .pagination-list li { + flex-grow: 1; + flex-shrink: 1; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; } + html.theme--documenter-dark .pagination-previous { + order: 2; } + html.theme--documenter-dark .pagination-next { + order: 3; } + html.theme--documenter-dark .pagination { + justify-content: space-between; } + html.theme--documenter-dark .pagination.is-centered .pagination-previous { + order: 1; } + html.theme--documenter-dark .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; } + html.theme--documenter-dark .pagination.is-centered .pagination-next { + order: 3; } + html.theme--documenter-dark .pagination.is-right .pagination-previous { + order: 1; } + html.theme--documenter-dark .pagination.is-right .pagination-next { + order: 2; } + html.theme--documenter-dark .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; } } + html.theme--documenter-dark .panel { + font-size: 15px; } + html.theme--documenter-dark .panel:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .panel-heading, + html.theme--documenter-dark .panel-tabs, + html.theme--documenter-dark .panel-block { + border-bottom: 1px solid #5e6d6f; + border-left: 1px solid #5e6d6f; + border-right: 1px solid #5e6d6f; } + html.theme--documenter-dark .panel-heading:first-child, + html.theme--documenter-dark .panel-tabs:first-child, + html.theme--documenter-dark .panel-block:first-child { + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark .panel-heading { + background-color: #282f2f; + border-radius: 0.4em 0.4em 0 0; + color: #f2f2f2; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; } + html.theme--documenter-dark .panel-tabs a { + border-bottom: 1px solid #5e6d6f; + margin-bottom: -1px; + padding: 0.5em; } + html.theme--documenter-dark .panel-tabs a.is-active { + border-bottom-color: #343c3d; + color: #17a689; } + html.theme--documenter-dark .panel-list a { + color: #fff; } + html.theme--documenter-dark .panel-list a:hover { + color: #1abc9c; } + html.theme--documenter-dark .panel-block { + align-items: center; + color: #f2f2f2; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .panel-block input[type="checkbox"] { + margin-right: 0.75em; } + html.theme--documenter-dark .panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; } + html.theme--documenter-dark .panel-block.is-wrapped { + flex-wrap: wrap; } + html.theme--documenter-dark .panel-block.is-active { + border-left-color: #1abc9c; + color: #17a689; } + html.theme--documenter-dark .panel-block.is-active .panel-icon { + color: #1abc9c; } + html.theme--documenter-dark a.panel-block, + html.theme--documenter-dark label.panel-block { + cursor: pointer; } + html.theme--documenter-dark a.panel-block:hover, + html.theme--documenter-dark label.panel-block:hover { + background-color: #282f2f; } + html.theme--documenter-dark .panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: white; + margin-right: 0.75em; } + html.theme--documenter-dark .panel-icon .fa { + font-size: inherit; + line-height: inherit; } + html.theme--documenter-dark .tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 15px; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; } + html.theme--documenter-dark .tabs a { + align-items: center; + border-bottom-color: #5e6d6f; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #fff; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; } + html.theme--documenter-dark .tabs a:hover { + border-bottom-color: #f2f2f2; + color: #f2f2f2; } + html.theme--documenter-dark .tabs li { + display: block; } + html.theme--documenter-dark .tabs li.is-active a { + border-bottom-color: #1abc9c; + color: #1abc9c; } + html.theme--documenter-dark .tabs ul { + align-items: center; + border-bottom-color: #5e6d6f; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; } + html.theme--documenter-dark .tabs ul.is-left { + padding-right: 0.75em; } + html.theme--documenter-dark .tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; } + html.theme--documenter-dark .tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; } + html.theme--documenter-dark .tabs .icon:first-child { + margin-right: 0.5em; } + html.theme--documenter-dark .tabs .icon:last-child { + margin-left: 0.5em; } + html.theme--documenter-dark .tabs.is-centered ul { + justify-content: center; } + html.theme--documenter-dark .tabs.is-right ul { + justify-content: flex-end; } + html.theme--documenter-dark .tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .tabs.is-boxed a:hover { + background-color: #282f2f; + border-bottom-color: #5e6d6f; } + html.theme--documenter-dark .tabs.is-boxed li.is-active a { + background-color: white; + border-color: #5e6d6f; + border-bottom-color: transparent !important; } + html.theme--documenter-dark .tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .tabs.is-toggle a { + border-color: #5e6d6f; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; } + html.theme--documenter-dark .tabs.is-toggle a:hover { + background-color: #282f2f; + border-color: #8c9b9d; + z-index: 2; } + html.theme--documenter-dark .tabs.is-toggle li + li { + margin-left: -1px; } + html.theme--documenter-dark .tabs.is-toggle li:first-child a { + border-radius: 0.4em 0 0 0.4em; } + html.theme--documenter-dark .tabs.is-toggle li:last-child a { + border-radius: 0 0.4em 0.4em 0; } + html.theme--documenter-dark .tabs.is-toggle li.is-active a { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; + z-index: 1; } + html.theme--documenter-dark .tabs.is-toggle ul { + border-bottom: none; } + html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; } + html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; } + html.theme--documenter-dark .tabs.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tabs { + font-size: 0.85em; } + html.theme--documenter-dark .tabs.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .tabs.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; } + .columns.is-mobile > html.theme--documenter-dark .column.is-narrow { + flex: none; } + .columns.is-mobile > html.theme--documenter-dark .column.is-full { + flex: none; + width: 100%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-three-quarters { + flex: none; + width: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-two-thirds { + flex: none; + width: 66.6666%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-half { + flex: none; + width: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-third { + flex: none; + width: 33.3333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-quarter { + flex: none; + width: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-fifth { + flex: none; + width: 20%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-two-fifths { + flex: none; + width: 40%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-three-fifths { + flex: none; + width: 60%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-four-fifths { + flex: none; + width: 80%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-quarters { + margin-left: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-thirds { + margin-left: 66.6666%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-half { + margin-left: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-third { + margin-left: 33.3333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-quarter { + margin-left: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-fifth { + margin-left: 20%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-fifths { + margin-left: 40%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-fifths { + margin-left: 60%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-four-fifths { + margin-left: 80%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-0 { + flex: none; + width: 0%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-0 { + margin-left: 0%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-1 { + flex: none; + width: 8.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-3 { + flex: none; + width: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-3 { + margin-left: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-4 { + flex: none; + width: 33.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-6 { + flex: none; + width: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-6 { + margin-left: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-7 { + flex: none; + width: 58.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-9 { + flex: none; + width: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-9 { + margin-left: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-10 { + flex: none; + width: 83.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-12 { + flex: none; + width: 100%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-12 { + margin-left: 100%; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .column.is-narrow-mobile { + flex: none; } + html.theme--documenter-dark .column.is-full-mobile { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-mobile { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-mobile { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-mobile { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-mobile { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-mobile { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-mobile { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-mobile { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-mobile { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-mobile { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-mobile { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-mobile { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-mobile { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-mobile { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-mobile { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-mobile { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-mobile { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-mobile { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-mobile { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-mobile { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-mobile { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-mobile { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-mobile { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-mobile { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-mobile { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-mobile { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-mobile { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-mobile { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-mobile { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-mobile { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-mobile { + margin-left: 100%; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .column.is-narrow, html.theme--documenter-dark .column.is-narrow-tablet { + flex: none; } + html.theme--documenter-dark .column.is-full, html.theme--documenter-dark .column.is-full-tablet { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters, html.theme--documenter-dark .column.is-three-quarters-tablet { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds, html.theme--documenter-dark .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half, html.theme--documenter-dark .column.is-half-tablet { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third, html.theme--documenter-dark .column.is-one-third-tablet { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter, html.theme--documenter-dark .column.is-one-quarter-tablet { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth, html.theme--documenter-dark .column.is-one-fifth-tablet { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths, html.theme--documenter-dark .column.is-two-fifths-tablet { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths, html.theme--documenter-dark .column.is-three-fifths-tablet { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths, html.theme--documenter-dark .column.is-four-fifths-tablet { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters, html.theme--documenter-dark .column.is-offset-three-quarters-tablet { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds, html.theme--documenter-dark .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half, html.theme--documenter-dark .column.is-offset-half-tablet { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third, html.theme--documenter-dark .column.is-offset-one-third-tablet { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter, html.theme--documenter-dark .column.is-offset-one-quarter-tablet { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth, html.theme--documenter-dark .column.is-offset-one-fifth-tablet { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths, html.theme--documenter-dark .column.is-offset-two-fifths-tablet { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths, html.theme--documenter-dark .column.is-offset-three-fifths-tablet { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths, html.theme--documenter-dark .column.is-offset-four-fifths-tablet { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0, html.theme--documenter-dark .column.is-0-tablet { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0, html.theme--documenter-dark .column.is-offset-0-tablet { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1, html.theme--documenter-dark .column.is-1-tablet { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3, html.theme--documenter-dark .column.is-3-tablet { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3, html.theme--documenter-dark .column.is-offset-3-tablet { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4, html.theme--documenter-dark .column.is-4-tablet { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6, html.theme--documenter-dark .column.is-6-tablet { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6, html.theme--documenter-dark .column.is-offset-6-tablet { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7, html.theme--documenter-dark .column.is-7-tablet { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9, html.theme--documenter-dark .column.is-9-tablet { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9, html.theme--documenter-dark .column.is-offset-9-tablet { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10, html.theme--documenter-dark .column.is-10-tablet { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12, html.theme--documenter-dark .column.is-12-tablet { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12, html.theme--documenter-dark .column.is-offset-12-tablet { + margin-left: 100%; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .column.is-narrow-touch { + flex: none; } + html.theme--documenter-dark .column.is-full-touch { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-touch { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-touch { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-touch { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-touch { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-touch { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-touch { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-touch { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-touch { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-touch { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-touch { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-touch { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-touch { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-touch { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-touch { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-touch { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-touch { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-touch { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-touch { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-touch { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-touch { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-touch { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-touch { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-touch { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-touch { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-touch { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-touch { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-touch { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-touch { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-touch { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-touch { + margin-left: 100%; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .column.is-narrow-desktop { + flex: none; } + html.theme--documenter-dark .column.is-full-desktop { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-desktop { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-desktop { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-desktop { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-desktop { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-desktop { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-desktop { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-desktop { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-desktop { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-desktop { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-desktop { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-desktop { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-desktop { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-desktop { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-desktop { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-desktop { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-desktop { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-desktop { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-desktop { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-desktop { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-desktop { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-desktop { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-desktop { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-desktop { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-desktop { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-desktop { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-desktop { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-desktop { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-desktop { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-desktop { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-desktop { + margin-left: 100%; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .column.is-narrow-widescreen { + flex: none; } + html.theme--documenter-dark .column.is-full-widescreen { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-widescreen { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-widescreen { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-widescreen { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-widescreen { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-widescreen { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-widescreen { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-widescreen { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-widescreen { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-widescreen { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-widescreen { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-widescreen { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-widescreen { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-widescreen { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-widescreen { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-widescreen { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-widescreen { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-widescreen { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-widescreen { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-widescreen { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-widescreen { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-widescreen { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-widescreen { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-widescreen { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-widescreen { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-widescreen { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-widescreen { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-widescreen { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-widescreen { + margin-left: 100%; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .column.is-narrow-fullhd { + flex: none; } + html.theme--documenter-dark .column.is-full-fullhd { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-fullhd { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-fullhd { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-fullhd { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-fullhd { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-fullhd { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-fullhd { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-fullhd { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-fullhd { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-fullhd { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-fullhd { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-fullhd { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-fullhd { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-fullhd { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-fullhd { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-fullhd { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-fullhd { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-fullhd { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-fullhd { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-fullhd { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-fullhd { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-fullhd { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-fullhd { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-fullhd { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-fullhd { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-fullhd { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-fullhd { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-fullhd { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-fullhd { + margin-left: 100%; } } + html.theme--documenter-dark .columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + html.theme--documenter-dark .columns:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); } + html.theme--documenter-dark .columns.is-centered { + justify-content: center; } + html.theme--documenter-dark .columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; } + html.theme--documenter-dark .columns.is-gapless > .column { + margin: 0; + padding: 0 !important; } + html.theme--documenter-dark .columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .columns.is-gapless:last-child { + margin-bottom: 0; } + html.theme--documenter-dark .columns.is-mobile { + display: flex; } + html.theme--documenter-dark .columns.is-multiline { + flex-wrap: wrap; } + html.theme--documenter-dark .columns.is-vcentered { + align-items: center; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns:not(.is-desktop) { + display: flex; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-desktop { + display: flex; } } + html.theme--documenter-dark .columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); } + html.theme--documenter-dark .columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); } + html.theme--documenter-dark .columns.is-variable.is-0 { + --columnGap: 0rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-0-mobile { + --columnGap: 0rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-0-tablet { + --columnGap: 0rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-0-tablet-only { + --columnGap: 0rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-0-touch { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-0-desktop { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-0-desktop-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-0-widescreen { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-0-fullhd { + --columnGap: 0rem; } } + html.theme--documenter-dark .columns.is-variable.is-1 { + --columnGap: 0.25rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-1-mobile { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-1-tablet { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-1-tablet-only { + --columnGap: 0.25rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-1-touch { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-1-desktop { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-1-desktop-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-1-widescreen { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-1-fullhd { + --columnGap: 0.25rem; } } + html.theme--documenter-dark .columns.is-variable.is-2 { + --columnGap: 0.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-2-mobile { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-2-tablet { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-2-tablet-only { + --columnGap: 0.5rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-2-touch { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-2-desktop { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-2-desktop-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-2-widescreen { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-2-fullhd { + --columnGap: 0.5rem; } } + html.theme--documenter-dark .columns.is-variable.is-3 { + --columnGap: 0.75rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-3-mobile { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-3-tablet { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-3-tablet-only { + --columnGap: 0.75rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-3-touch { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-3-desktop { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-3-desktop-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-3-widescreen { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-3-fullhd { + --columnGap: 0.75rem; } } + html.theme--documenter-dark .columns.is-variable.is-4 { + --columnGap: 1rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-4-mobile { + --columnGap: 1rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-4-tablet { + --columnGap: 1rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-4-tablet-only { + --columnGap: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-4-touch { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-4-desktop { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-4-desktop-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-4-widescreen { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-4-fullhd { + --columnGap: 1rem; } } + html.theme--documenter-dark .columns.is-variable.is-5 { + --columnGap: 1.25rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-5-mobile { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-5-tablet { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-5-tablet-only { + --columnGap: 1.25rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-5-touch { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-5-desktop { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-5-desktop-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-5-widescreen { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-5-fullhd { + --columnGap: 1.25rem; } } + html.theme--documenter-dark .columns.is-variable.is-6 { + --columnGap: 1.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-6-mobile { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-6-tablet { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-6-tablet-only { + --columnGap: 1.5rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-6-touch { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-6-desktop { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-6-desktop-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-6-widescreen { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-6-fullhd { + --columnGap: 1.5rem; } } + html.theme--documenter-dark .columns.is-variable.is-7 { + --columnGap: 1.75rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-7-mobile { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-7-tablet { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-7-tablet-only { + --columnGap: 1.75rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-7-touch { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-7-desktop { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-7-desktop-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-7-widescreen { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-7-fullhd { + --columnGap: 1.75rem; } } + html.theme--documenter-dark .columns.is-variable.is-8 { + --columnGap: 2rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-8-mobile { + --columnGap: 2rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-8-tablet { + --columnGap: 2rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-8-tablet-only { + --columnGap: 2rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-8-touch { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-8-desktop { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-8-desktop-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-8-widescreen { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-8-fullhd { + --columnGap: 2rem; } } + html.theme--documenter-dark .tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: min-content; } + html.theme--documenter-dark .tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + html.theme--documenter-dark .tile.is-ancestor:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .tile.is-child { + margin: 0 !important; } + html.theme--documenter-dark .tile.is-parent { + padding: 0.75rem; } + html.theme--documenter-dark .tile.is-vertical { + flex-direction: column; } + html.theme--documenter-dark .tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .tile:not(.is-child) { + display: flex; } + html.theme--documenter-dark .tile.is-1 { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .tile.is-12 { + flex: none; + width: 100%; } } + html.theme--documenter-dark .hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; } + html.theme--documenter-dark .hero .navbar { + background: none; } + html.theme--documenter-dark .hero .tabs ul { + border-bottom: none; } + html.theme--documenter-dark .hero.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-white strong { + color: inherit; } + html.theme--documenter-dark .hero.is-white .title { + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); } + html.theme--documenter-dark .hero.is-white .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-white .subtitle strong { + color: #0a0a0a; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-white .navbar-menu { + background-color: white; } } + html.theme--documenter-dark .hero.is-white .navbar-item, + html.theme--documenter-dark .hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); } + html.theme--documenter-dark .hero.is-white a.navbar-item:hover, html.theme--documenter-dark .hero.is-white a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-white .navbar-link:hover, + html.theme--documenter-dark .hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-white .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-white .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } + html.theme--documenter-dark .hero.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-black strong { + color: inherit; } + html.theme--documenter-dark .hero.is-black .title { + color: white; } + html.theme--documenter-dark .hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-black .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-black .subtitle strong { + color: white; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-black .navbar-menu { + background-color: #0a0a0a; } } + html.theme--documenter-dark .hero.is-black .navbar-item, + html.theme--documenter-dark .hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-black a.navbar-item:hover, html.theme--documenter-dark .hero.is-black a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-black .navbar-link:hover, + html.theme--documenter-dark .hero.is-black .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .hero.is-black .tabs a { + color: white; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-black .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-black .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a { + color: white; } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } + html.theme--documenter-dark .hero.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-light strong { + color: inherit; } + html.theme--documenter-dark .hero.is-light .title { + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .subtitle { + color: rgba(40, 47, 47, 0.9); } + html.theme--documenter-dark .hero.is-light .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-light .subtitle strong { + color: #282f2f; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-light .navbar-menu { + background-color: #ecf0f1; } } + html.theme--documenter-dark .hero.is-light .navbar-item, + html.theme--documenter-dark .hero.is-light .navbar-link { + color: rgba(40, 47, 47, 0.7); } + html.theme--documenter-dark .hero.is-light a.navbar-item:hover, html.theme--documenter-dark .hero.is-light a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-light .navbar-link:hover, + html.theme--documenter-dark .hero.is-light .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .tabs a { + color: #282f2f; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-light .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-light .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a { + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-light.is-bold { + background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } } + html.theme--documenter-dark .hero.is-dark, html.theme--documenter-dark .content kbd.hero { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-dark strong, + html.theme--documenter-dark .content kbd.hero strong { + color: inherit; } + html.theme--documenter-dark .hero.is-dark .title, html.theme--documenter-dark .content kbd.hero .title { + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .subtitle, html.theme--documenter-dark .content kbd.hero .subtitle { + color: rgba(236, 240, 241, 0.9); } + html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button), html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-dark .subtitle strong, + html.theme--documenter-dark .content kbd.hero .subtitle strong { + color: #ecf0f1; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-dark .navbar-menu, html.theme--documenter-dark .content kbd.hero .navbar-menu { + background-color: #282f2f; } } + html.theme--documenter-dark .hero.is-dark .navbar-item, html.theme--documenter-dark .content kbd.hero .navbar-item, + html.theme--documenter-dark .hero.is-dark .navbar-link, + html.theme--documenter-dark .content kbd.hero .navbar-link { + color: rgba(236, 240, 241, 0.7); } + html.theme--documenter-dark .hero.is-dark a.navbar-item:hover, html.theme--documenter-dark .content kbd.hero a.navbar-item:hover, html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active, html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-dark .navbar-link:hover, + html.theme--documenter-dark .content kbd.hero .navbar-link:hover, + html.theme--documenter-dark .hero.is-dark .navbar-link.is-active, + html.theme--documenter-dark .content kbd.hero .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .tabs a, html.theme--documenter-dark .content kbd.hero .tabs a { + color: #ecf0f1; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-dark .tabs a:hover, html.theme--documenter-dark .content kbd.hero .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-dark .tabs li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a { + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a:hover { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .hero.is-dark.is-bold, html.theme--documenter-dark .content kbd.hero.is-bold { + background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu, html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } } + html.theme--documenter-dark .hero.is-primary, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-primary strong, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink strong { + color: inherit; } + html.theme--documenter-dark .hero.is-primary .title, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .title { + color: #fff; } + html.theme--documenter-dark .hero.is-primary .subtitle, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-primary .subtitle strong, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-primary .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-menu { + background-color: #375a7f; } } + html.theme--documenter-dark .hero.is-primary .navbar-item, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-item, + html.theme--documenter-dark .hero.is-primary .navbar-link, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-primary a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-primary .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, + html.theme--documenter-dark .hero.is-primary .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .hero.is-primary .tabs a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-primary .tabs a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-primary .tabs li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } } + html.theme--documenter-dark .hero.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-info strong { + color: inherit; } + html.theme--documenter-dark .hero.is-info .title { + color: #fff; } + html.theme--documenter-dark .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-info .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-info .navbar-menu { + background-color: #024c7d; } } + html.theme--documenter-dark .hero.is-info .navbar-item, + html.theme--documenter-dark .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-info a.navbar-item:hover, html.theme--documenter-dark .hero.is-info a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-info .navbar-link:hover, + html.theme--documenter-dark .hero.is-info .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-info .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-info .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%); } } + html.theme--documenter-dark .hero.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-success strong { + color: inherit; } + html.theme--documenter-dark .hero.is-success .title { + color: #fff; } + html.theme--documenter-dark .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-success .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-success .navbar-menu { + background-color: #008438; } } + html.theme--documenter-dark .hero.is-success .navbar-item, + html.theme--documenter-dark .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-success a.navbar-item:hover, html.theme--documenter-dark .hero.is-success a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-success .navbar-link:hover, + html.theme--documenter-dark .hero.is-success .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-success .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-success .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #008438; } + html.theme--documenter-dark .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%); } } + html.theme--documenter-dark .hero.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-warning strong { + color: inherit; } + html.theme--documenter-dark .hero.is-warning .title { + color: #fff; } + html.theme--documenter-dark .hero.is-warning .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-warning .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-warning .navbar-menu { + background-color: #ad8100; } } + html.theme--documenter-dark .hero.is-warning .navbar-item, + html.theme--documenter-dark .hero.is-warning .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-warning a.navbar-item:hover, html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-warning .navbar-link:hover, + html.theme--documenter-dark .hero.is-warning .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .hero.is-warning .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-warning .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-warning .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%); } } + html.theme--documenter-dark .hero.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-danger strong { + color: inherit; } + html.theme--documenter-dark .hero.is-danger .title { + color: #fff; } + html.theme--documenter-dark .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-danger .navbar-menu { + background-color: #9e1b0d; } } + html.theme--documenter-dark .hero.is-danger .navbar-item, + html.theme--documenter-dark .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-danger a.navbar-item:hover, html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-danger .navbar-link:hover, + html.theme--documenter-dark .hero.is-danger .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-danger .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-danger .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%); } } + html.theme--documenter-dark .hero.is-small .hero-body, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.hero .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; } } + html.theme--documenter-dark .hero.is-halfheight .hero-body, html.theme--documenter-dark .hero.is-fullheight .hero-body, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body { + align-items: center; + display: flex; } + html.theme--documenter-dark .hero.is-halfheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .hero.is-halfheight { + min-height: 50vh; } + html.theme--documenter-dark .hero.is-fullheight { + min-height: 100vh; } + html.theme--documenter-dark .hero-video { + overflow: hidden; } + html.theme--documenter-dark .hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + transform: translate3d(-50%, -50%, 0); } + html.theme--documenter-dark .hero-video.is-transparent { + opacity: 0.3; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero-video { + display: none; } } + html.theme--documenter-dark .hero-buttons { + margin-top: 1.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero-buttons .button { + display: flex; } + html.theme--documenter-dark .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero-buttons { + display: flex; + justify-content: center; } + html.theme--documenter-dark .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; } } + html.theme--documenter-dark .hero-head, + html.theme--documenter-dark .hero-foot { + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; } + html.theme--documenter-dark .section { + padding: 3rem 1.5rem; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .section.is-medium { + padding: 9rem 1.5rem; } + html.theme--documenter-dark .section.is-large { + padding: 18rem 1.5rem; } } + html.theme--documenter-dark .footer { + background-color: #282f2f; + padding: 3rem 1.5rem 6rem; } + html.theme--documenter-dark hr { + height: 1px; } + html.theme--documenter-dark h6 { + text-transform: uppercase; + letter-spacing: 0.5px; } + html.theme--documenter-dark .hero { + background-color: #343c3d; } + html.theme--documenter-dark a { + transition: all 200ms ease; } + html.theme--documenter-dark .button { + transition: all 200ms ease; + border-width: 1px; + color: white; } + html.theme--documenter-dark .button.is-active, html.theme--documenter-dark .button.is-focused, html.theme--documenter-dark .button:active, html.theme--documenter-dark .button:focus { + box-shadow: 0 0 0 2px rgba(140, 155, 157, 0.5); } + html.theme--documenter-dark .button.is-white.is-hovered, html.theme--documenter-dark .button.is-white:hover { + background-color: white; } + html.theme--documenter-dark .button.is-white.is-active, html.theme--documenter-dark .button.is-white.is-focused, html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white:focus { + border-color: white; + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5); } + html.theme--documenter-dark .button.is-black.is-hovered, html.theme--documenter-dark .button.is-black:hover { + background-color: #1d1d1d; } + html.theme--documenter-dark .button.is-black.is-active, html.theme--documenter-dark .button.is-black.is-focused, html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black:focus { + border-color: #0a0a0a; + box-shadow: 0 0 0 2px rgba(10, 10, 10, 0.5); } + html.theme--documenter-dark .button.is-light.is-hovered, html.theme--documenter-dark .button.is-light:hover { + background-color: white; } + html.theme--documenter-dark .button.is-light.is-active, html.theme--documenter-dark .button.is-light.is-focused, html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light:focus { + border-color: #ecf0f1; + box-shadow: 0 0 0 2px rgba(236, 240, 241, 0.5); } + html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered, html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover { + background-color: #3a4344; } + html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused, html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus { + border-color: #282f2f; + box-shadow: 0 0 0 2px rgba(40, 47, 47, 0.5); } + html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover { + background-color: #436d9a; } + html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink, html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus { + border-color: #375a7f; + box-shadow: 0 0 0 2px rgba(55, 90, 127, 0.5); } + html.theme--documenter-dark .button.is-link.is-hovered, html.theme--documenter-dark .button.is-link:hover { + background-color: #1fdeb8; } + html.theme--documenter-dark .button.is-link.is-active, html.theme--documenter-dark .button.is-link.is-focused, html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link:focus { + border-color: #1abc9c; + box-shadow: 0 0 0 2px rgba(26, 188, 156, 0.5); } + html.theme--documenter-dark .button.is-info.is-hovered, html.theme--documenter-dark .button.is-info:hover { + background-color: #0363a3; } + html.theme--documenter-dark .button.is-info.is-active, html.theme--documenter-dark .button.is-info.is-focused, html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info:focus { + border-color: #024c7d; + box-shadow: 0 0 0 2px rgba(2, 76, 125, 0.5); } + html.theme--documenter-dark .button.is-success.is-hovered, html.theme--documenter-dark .button.is-success:hover { + background-color: #00aa48; } + html.theme--documenter-dark .button.is-success.is-active, html.theme--documenter-dark .button.is-success.is-focused, html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success:focus { + border-color: #008438; + box-shadow: 0 0 0 2px rgba(0, 132, 56, 0.5); } + html.theme--documenter-dark .button.is-warning.is-hovered, html.theme--documenter-dark .button.is-warning:hover { + background-color: #d39e00; } + html.theme--documenter-dark .button.is-warning.is-active, html.theme--documenter-dark .button.is-warning.is-focused, html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning:focus { + border-color: #ad8100; + box-shadow: 0 0 0 2px rgba(173, 129, 0, 0.5); } + html.theme--documenter-dark .button.is-danger.is-hovered, html.theme--documenter-dark .button.is-danger:hover { + background-color: #c12110; } + html.theme--documenter-dark .button.is-danger.is-active, html.theme--documenter-dark .button.is-danger.is-focused, html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger:focus { + border-color: #9e1b0d; + box-shadow: 0 0 0 2px rgba(158, 27, 13, 0.5); } + html.theme--documenter-dark .label { + color: #dbdee0; } + html.theme--documenter-dark .button, + html.theme--documenter-dark .control.has-icons-left .icon, + html.theme--documenter-dark .control.has-icons-right .icon, + html.theme--documenter-dark .input, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .select, + html.theme--documenter-dark .select select, + html.theme--documenter-dark .textarea { + height: 2.5em; } + + html.theme--documenter-dark .input, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark .textarea { + transition: all 200ms ease; + box-shadow: none; + border-width: 1px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .select:after, + html.theme--documenter-dark .select select { + border-width: 1px; } + html.theme--documenter-dark .control.has-addons .button, + html.theme--documenter-dark .control.has-addons .input, + html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search > input, + html.theme--documenter-dark .control.has-addons .select { + margin-right: -1px; } + html.theme--documenter-dark .notification { + background-color: #343c3d; } + html.theme--documenter-dark .card { + box-shadow: none; + border: 1px solid #343c3d; + background-color: #282f2f; + border-radius: 0.4em; } + html.theme--documenter-dark .card .card-image img { + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .card .card-header { + box-shadow: none; + background-color: rgba(18, 18, 18, 0.2); + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .card .card-footer { + background-color: rgba(18, 18, 18, 0.2); } + html.theme--documenter-dark .card .card-footer, + html.theme--documenter-dark .card .card-footer-item { + border-width: 1px; + border-color: #343c3d; } + html.theme--documenter-dark .notification.is-white a:not(.button) { + color: #0a0a0a; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-black a:not(.button) { + color: white; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-light a:not(.button) { + color: #282f2f; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-dark a:not(.button), html.theme--documenter-dark .content kbd.notification a:not(.button) { + color: #ecf0f1; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-primary a:not(.button), html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-link a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-info a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-success a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-warning a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-danger a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .tag, html.theme--documenter-dark .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .content kbd { + border-radius: 0.4em; } + html.theme--documenter-dark .menu-list a { + transition: all 300ms ease; } + html.theme--documenter-dark .modal-card-body { + background-color: #282f2f; } + html.theme--documenter-dark .modal-card-foot, + html.theme--documenter-dark .modal-card-head { + border-color: #343c3d; } + html.theme--documenter-dark .message-header { + font-weight: 700; + background-color: #343c3d; + color: white; } + html.theme--documenter-dark .message-body { + border-width: 1px; + border-color: #343c3d; } + html.theme--documenter-dark .navbar { + border-radius: 0.4em; } + html.theme--documenter-dark .navbar.is-transparent { + background: none; } + html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #1abc9c; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .navbar .navbar-menu { + background-color: #375a7f; + border-radius: 0 0 0.4em 0.4em; } } + html.theme--documenter-dark .hero .navbar, + html.theme--documenter-dark body > .navbar { + border-radius: 0; } + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-previous { + border-width: 1px; } + html.theme--documenter-dark .panel-block, + html.theme--documenter-dark .panel-heading, + html.theme--documenter-dark .panel-tabs { + border-width: 1px; } + html.theme--documenter-dark .panel-block:first-child, + html.theme--documenter-dark .panel-heading:first-child, + html.theme--documenter-dark .panel-tabs:first-child { + border-top-width: 1px; } + html.theme--documenter-dark .panel-heading { + font-weight: 700; } + html.theme--documenter-dark .panel-tabs a { + border-width: 1px; + margin-bottom: -1px; } + html.theme--documenter-dark .panel-tabs a.is-active { + border-bottom-color: #17a689; } + html.theme--documenter-dark .panel-block:hover { + color: #1dd2af; } + html.theme--documenter-dark .panel-block:hover .panel-icon { + color: #1dd2af; } + html.theme--documenter-dark .panel-block.is-active .panel-icon { + color: #17a689; } + html.theme--documenter-dark .tabs a { + border-bottom-width: 1px; + margin-bottom: -1px; } + html.theme--documenter-dark .tabs ul { + border-bottom-width: 1px; } + html.theme--documenter-dark .tabs.is-boxed a { + border-width: 1px; } + html.theme--documenter-dark .tabs.is-boxed li.is-active a { + background-color: #1f2424; } + html.theme--documenter-dark .tabs.is-toggle li a { + border-width: 1px; + margin-bottom: 0; } + html.theme--documenter-dark .tabs.is-toggle li + li { + margin-left: -1px; } + html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover, html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark h1 .docs-heading-anchor, html.theme--documenter-dark h1 .docs-heading-anchor:hover, html.theme--documenter-dark h1 .docs-heading-anchor:visited, html.theme--documenter-dark h2 .docs-heading-anchor, html.theme--documenter-dark h2 .docs-heading-anchor:hover, html.theme--documenter-dark h2 .docs-heading-anchor:visited, html.theme--documenter-dark h3 .docs-heading-anchor, html.theme--documenter-dark h3 .docs-heading-anchor:hover, html.theme--documenter-dark h3 .docs-heading-anchor:visited, html.theme--documenter-dark h4 .docs-heading-anchor, html.theme--documenter-dark h4 .docs-heading-anchor:hover, html.theme--documenter-dark h4 .docs-heading-anchor:visited, html.theme--documenter-dark h5 .docs-heading-anchor, html.theme--documenter-dark h5 .docs-heading-anchor:hover, html.theme--documenter-dark h5 .docs-heading-anchor:visited, html.theme--documenter-dark h6 .docs-heading-anchor, html.theme--documenter-dark h6 .docs-heading-anchor:hover, html.theme--documenter-dark h6 .docs-heading-anchor:visited { + color: #f2f2f2; } + html.theme--documenter-dark h1 .docs-heading-anchor-permalink, html.theme--documenter-dark h2 .docs-heading-anchor-permalink, html.theme--documenter-dark h3 .docs-heading-anchor-permalink, html.theme--documenter-dark h4 .docs-heading-anchor-permalink, html.theme--documenter-dark h5 .docs-heading-anchor-permalink, html.theme--documenter-dark h6 .docs-heading-anchor-permalink { + visibility: hidden; + vertical-align: middle; + margin-left: 0.5em; + font-size: 0.7rem; } + html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f0c1"; } + html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink { + visibility: visible; } + html.theme--documenter-dark .docs-light-only { + display: none !important; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 0.4em; + font-size: 15px; } + html.theme--documenter-dark .admonition strong { + color: currentColor; } + html.theme--documenter-dark .admonition.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 0.85em; } + html.theme--documenter-dark .admonition.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .admonition.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .admonition.is-default { + background-color: #282f2f; + border-color: #5e6d6f; } + html.theme--documenter-dark .admonition.is-default > .admonition-header { + background-color: #5e6d6f; } + html.theme--documenter-dark .admonition.is-info { + background-color: #282f2f; + border-color: #024c7d; } + html.theme--documenter-dark .admonition.is-info > .admonition-header { + background-color: #024c7d; } + html.theme--documenter-dark .admonition.is-success { + background-color: #282f2f; + border-color: #008438; } + html.theme--documenter-dark .admonition.is-success > .admonition-header { + background-color: #008438; } + html.theme--documenter-dark .admonition.is-warning { + background-color: #282f2f; + border-color: #ad8100; } + html.theme--documenter-dark .admonition.is-warning > .admonition-header { + background-color: #ad8100; } + html.theme--documenter-dark .admonition.is-danger { + background-color: #282f2f; + border-color: #9e1b0d; } + html.theme--documenter-dark .admonition.is-danger > .admonition-header { + background-color: #9e1b0d; } + html.theme--documenter-dark .admonition.is-compat { + background-color: #282f2f; + border-color: #137886; } + html.theme--documenter-dark .admonition.is-compat > .admonition-header { + background-color: #137886; } + html.theme--documenter-dark .admonition-header { + background-color: #5e6d6f; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75em; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 1em 1.25em; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: transparent; + border: 1px solid #5e6d6f; + box-shadow: none; + max-width: 100%; } + html.theme--documenter-dark .docstring > header { + display: flex; + flex-grow: 1; + align-items: stretch; + padding: 0.75rem; + background-color: #282f2f; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: none; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > header code { + background-color: transparent; } + html.theme--documenter-dark .docstring > header .docstring-binding { + margin-right: 0.3em; } + html.theme--documenter-dark .docstring > header .docstring-category { + margin-left: 0.3em; } + html.theme--documenter-dark .docstring > section { + position: relative; + padding: 1rem 1.25rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.625rem; + bottom: 0.5rem; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; + padding: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right { + display: flex; + white-space: nowrap; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + display: inline-block; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label { + padding: 0; + margin-left: 0.3em; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { + margin: auto 0 auto 1rem; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + font-size: 1.5rem; + margin: auto 0 auto 1rem; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar > * { + margin: auto 0; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + position: sticky; + top: 0; + padding: 0 1rem; + /* For Headroom.js */ + transition-property: top, box-shadow; + -webkit-transition-property: top, box-shadow; + /* Safari */ + transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + /* Safari */ } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top { + box-shadow: 0.2rem 0rem 0.4rem #171717; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { + top: -4.5rem; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } } + html.theme--documenter-dark #documenter .docs-main section.footnotes { + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child, html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child { + margin-right: 1em; + margin-bottom: 0.4em; } + html.theme--documenter-dark #documenter .docs-main .docs-footer { + display: flex; + flex-wrap: wrap; + margin-left: 0; + margin-right: 0; + border-top: 1px solid #5e6d6f; + padding-top: 1rem; + padding-bottom: 1rem; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main .docs-footer { + padding-left: 1rem; + padding-right: 1rem; } } + html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage, html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage { + text-align: right; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break { + flex-basis: 100%; + height: 0; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message { + font-size: 0.8em; + margin: 0.5em auto 0 auto; + text-align: center; } + html.theme--documenter-dark #documenter .docs-sidebar { + display: flex; + flex-direction: column; + color: #fff; + background-color: #282f2f; + border-right: 1px solid #5e6d6f; + padding: 0; + flex: 0 0 18rem; + z-index: 5; + font-size: 15px; + position: fixed; + left: -18rem; + width: 18rem; + height: 100%; + transition: left 0.3s; + /* Setting up a nicer theme style for the scrollbar */ } + html.theme--documenter-dark #documenter .docs-sidebar.visible { + left: 0; + box-shadow: 0.4rem 0rem 0.8rem #171717; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar.visible { + box-shadow: none; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar { + left: 0; + top: 0; } } + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo { + margin-top: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { + max-height: 6rem; + margin: auto; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name { + flex-shrink: 0; + font-size: 1.5rem; + font-weight: 700; + text-align: center; + white-space: nowrap; + overflow: hidden; + padding: 0.5rem 0; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit { + max-width: 16.2rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* Managing collapsible submenus */ } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li > .tocitem { + font-weight: bold; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li li { + font-size: 14.25px; + margin-left: 1em; + border-left: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { + display: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed { + display: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { + display: block; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { + flex-grow: 2; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + font-size: 11.25px; + margin-left: 1rem; + margin-top: auto; + margin-bottom: auto; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f054"; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { + content: "\f078"; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem { + display: block; + padding: 0.5rem 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover { + color: #fff; + background: #282f2f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { + color: #fff; + background-color: #32393a; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active { + border-top: 1px solid #5e6d6f; + border-bottom: 1px solid #5e6d6f; + background-color: #1f2424; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { + background-color: #1f2424; + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { + background-color: #32393a; + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { + border-top: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal { + margin: 0 0.5rem 0.5rem; + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li { + font-size: 12.75px; + border-left: none; + margin-left: 0; + margin-top: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { + width: 100%; + padding: 0; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { + content: "⚬"; + margin-right: 0.4em; } + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search { + margin: auto; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + width: 14.4rem; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { + width: .3rem; + background: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #3b4445; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { + background: #4e5a5c; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-sidebar { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar { + width: .3rem; + background: none; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #3b4445; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { + background: #4e5a5c; } } + html.theme--documenter-dark #documenter .docs-main #documenter-search-info { + margin-bottom: 1rem; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results { + list-style-type: circle; + list-style-position: outside; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results li { + margin-left: 2rem; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight { + background-color: yellow; } + html.theme--documenter-dark { + background-color: #1f2424; + font-size: 16px; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-builtin-name, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs { + display: block; + overflow-x: auto; + background: #2b2b2b; + color: #f8f8f2; + padding: 0.5em; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-builtin-name, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/v0.11.9/assets/themes/documenter-light.css b/v0.11.9/assets/themes/documenter-light.css new file mode 100644 index 00000000..57fdf947 --- /dev/null +++ b/v0.11.9/assets/themes/documenter-light.css @@ -0,0 +1,7630 @@ +@charset "UTF-8"; +/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ +@keyframes spinAround { + from { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } + +.delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + transform: rotate(-45deg); + transform-origin: center; + width: 0.625em; } + +.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .tabs:not(:last-child), .admonition:not(:last-child) { + margin-bottom: 1.5rem; } + +.delete, .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + pointer-events: auto; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; } + .delete::before, .modal-close::before, .delete::after, .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .delete::before, .modal-close::before { + height: 2px; + width: 50%; } + .delete::after, .modal-close::after { + height: 50%; + width: 2px; } + .delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); } + .delete:active, .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete, .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.delete, .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.delete, .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.is-overlay, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .modal, .modal-background, .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.button, .input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select, .file-cta, +.file-name, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; } + .button:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .file-cta:focus, + .file-name:focus, .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .is-focused.button, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta, + .is-focused.file-name, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .button:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .file-cta:active, + .file-name:active, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .is-active.button, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active, .is-active.file-cta, + .is-active.file-name, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis { + outline: none; } + .button[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled], + .file-name[disabled], .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], + fieldset[disabled] .button, + fieldset[disabled] .input, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] .textarea, + fieldset[disabled] .select select, + .select fieldset[disabled] select, + fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, + fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis { + cursor: not-allowed; } + +/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; } + +ul { + list-style: none; } + +button, +input, +select, +textarea { + margin: 0; } + +html { + box-sizing: border-box; } + +*, *::before, *::after { + box-sizing: inherit; } + +img, +embed, +iframe, +object, +video { + height: auto; + max-width: 100%; } + +audio { + max-width: 100%; } + +iframe { + border: 0; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + td:not([align]), + th:not([align]) { + text-align: left; } + +html { + background-color: white; + font-size: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + +article, +aside, +figure, +footer, +header, +hgroup, +section { + display: block; } + +body, +button, +input, +select, +textarea { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #222222; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + +a { + color: #2e63b8; + cursor: pointer; + text-decoration: none; } + a strong { + color: currentColor; } + a:hover { + color: #363636; } + +code { + background-color: rgba(0, 0, 0, 0.05); + color: #000000; + font-size: 0.875em; + font-weight: normal; + padding: 0.1em; } + +hr { + background-color: whitesmoke; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; } + +img { + height: auto; + max-width: 100%; } + +input[type="checkbox"], +input[type="radio"] { + vertical-align: baseline; } + +small { + font-size: 0.875em; } + +span { + font-style: inherit; + font-weight: inherit; } + +strong { + color: #222222; + font-weight: 700; } + +fieldset { + border: none; } + +pre { + -webkit-overflow-scrolling: touch; + background-color: whitesmoke; + color: #222222; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; } + pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; } + +table td, +table th { + vertical-align: top; } + table td:not([align]), + table th:not([align]) { + text-align: left; } + +table th { + color: #222222; } + +.is-clearfix::after { + clear: both; + content: " "; + display: table; } + +.is-pulled-left { + float: left !important; } + +.is-pulled-right { + float: right !important; } + +.is-clipped { + overflow: hidden !important; } + +.is-size-1 { + font-size: 3rem !important; } + +.is-size-2 { + font-size: 2.5rem !important; } + +.is-size-3 { + font-size: 2rem !important; } + +.is-size-4 { + font-size: 1.5rem !important; } + +.is-size-5 { + font-size: 1.25rem !important; } + +.is-size-6 { + font-size: 1rem !important; } + +.is-size-7, .docstring > section > a.docs-sourcelink { + font-size: 0.75rem !important; } + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; } + .is-size-2-mobile { + font-size: 2.5rem !important; } + .is-size-3-mobile { + font-size: 2rem !important; } + .is-size-4-mobile { + font-size: 1.5rem !important; } + .is-size-5-mobile { + font-size: 1.25rem !important; } + .is-size-6-mobile { + font-size: 1rem !important; } + .is-size-7-mobile { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; } + .is-size-2-tablet { + font-size: 2.5rem !important; } + .is-size-3-tablet { + font-size: 2rem !important; } + .is-size-4-tablet { + font-size: 1.5rem !important; } + .is-size-5-tablet { + font-size: 1.25rem !important; } + .is-size-6-tablet { + font-size: 1rem !important; } + .is-size-7-tablet { + font-size: 0.75rem !important; } } + +@media screen and (max-width: 1055px) { + .is-size-1-touch { + font-size: 3rem !important; } + .is-size-2-touch { + font-size: 2.5rem !important; } + .is-size-3-touch { + font-size: 2rem !important; } + .is-size-4-touch { + font-size: 1.5rem !important; } + .is-size-5-touch { + font-size: 1.25rem !important; } + .is-size-6-touch { + font-size: 1rem !important; } + .is-size-7-touch { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1056px) { + .is-size-1-desktop { + font-size: 3rem !important; } + .is-size-2-desktop { + font-size: 2.5rem !important; } + .is-size-3-desktop { + font-size: 2rem !important; } + .is-size-4-desktop { + font-size: 1.5rem !important; } + .is-size-5-desktop { + font-size: 1.25rem !important; } + .is-size-6-desktop { + font-size: 1rem !important; } + .is-size-7-desktop { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1216px) { + .is-size-1-widescreen { + font-size: 3rem !important; } + .is-size-2-widescreen { + font-size: 2.5rem !important; } + .is-size-3-widescreen { + font-size: 2rem !important; } + .is-size-4-widescreen { + font-size: 1.5rem !important; } + .is-size-5-widescreen { + font-size: 1.25rem !important; } + .is-size-6-widescreen { + font-size: 1rem !important; } + .is-size-7-widescreen { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1408px) { + .is-size-1-fullhd { + font-size: 3rem !important; } + .is-size-2-fullhd { + font-size: 2.5rem !important; } + .is-size-3-fullhd { + font-size: 2rem !important; } + .is-size-4-fullhd { + font-size: 1.5rem !important; } + .is-size-5-fullhd { + font-size: 1.25rem !important; } + .is-size-6-fullhd { + font-size: 1rem !important; } + .is-size-7-fullhd { + font-size: 0.75rem !important; } } + +.has-text-centered { + text-align: center !important; } + +.has-text-justified { + text-align: justify !important; } + +.has-text-left { + text-align: left !important; } + +.has-text-right { + text-align: right !important; } + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; } } + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-centered-tablet-only { + text-align: center !important; } } + +@media screen and (max-width: 1055px) { + .has-text-centered-touch { + text-align: center !important; } } + +@media screen and (min-width: 1056px) { + .has-text-centered-desktop { + text-align: center !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-centered-desktop-only { + text-align: center !important; } } + +@media screen and (min-width: 1216px) { + .has-text-centered-widescreen { + text-align: center !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-centered-widescreen-only { + text-align: center !important; } } + +@media screen and (min-width: 1408px) { + .has-text-centered-fullhd { + text-align: center !important; } } + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; } } + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-justified-tablet-only { + text-align: justify !important; } } + +@media screen and (max-width: 1055px) { + .has-text-justified-touch { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) { + .has-text-justified-desktop { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-justified-desktop-only { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) { + .has-text-justified-widescreen { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-justified-widescreen-only { + text-align: justify !important; } } + +@media screen and (min-width: 1408px) { + .has-text-justified-fullhd { + text-align: justify !important; } } + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; } } + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-left-tablet-only { + text-align: left !important; } } + +@media screen and (max-width: 1055px) { + .has-text-left-touch { + text-align: left !important; } } + +@media screen and (min-width: 1056px) { + .has-text-left-desktop { + text-align: left !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-left-desktop-only { + text-align: left !important; } } + +@media screen and (min-width: 1216px) { + .has-text-left-widescreen { + text-align: left !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-left-widescreen-only { + text-align: left !important; } } + +@media screen and (min-width: 1408px) { + .has-text-left-fullhd { + text-align: left !important; } } + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; } } + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-right-tablet-only { + text-align: right !important; } } + +@media screen and (max-width: 1055px) { + .has-text-right-touch { + text-align: right !important; } } + +@media screen and (min-width: 1056px) { + .has-text-right-desktop { + text-align: right !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-right-desktop-only { + text-align: right !important; } } + +@media screen and (min-width: 1216px) { + .has-text-right-widescreen { + text-align: right !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-right-widescreen-only { + text-align: right !important; } } + +@media screen and (min-width: 1408px) { + .has-text-right-fullhd { + text-align: right !important; } } + +.is-capitalized { + text-transform: capitalize !important; } + +.is-lowercase { + text-transform: lowercase !important; } + +.is-uppercase { + text-transform: uppercase !important; } + +.is-italic { + font-style: italic !important; } + +.has-text-white { + color: white !important; } + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; } + +.has-background-white { + background-color: white !important; } + +.has-text-black { + color: #0a0a0a !important; } + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; } + +.has-background-black { + background-color: #0a0a0a !important; } + +.has-text-light { + color: whitesmoke !important; } + +a.has-text-light:hover, a.has-text-light:focus { + color: #dbdbdb !important; } + +.has-background-light { + background-color: whitesmoke !important; } + +.has-text-dark { + color: #363636 !important; } + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #1c1c1c !important; } + +.has-background-dark { + background-color: #363636 !important; } + +.has-text-primary { + color: #4eb5de !important; } + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #27a1d2 !important; } + +.has-background-primary { + background-color: #4eb5de !important; } + +.has-text-link { + color: #2e63b8 !important; } + +a.has-text-link:hover, a.has-text-link:focus { + color: #244d8f !important; } + +.has-background-link { + background-color: #2e63b8 !important; } + +.has-text-info { + color: #209cee !important; } + +a.has-text-info:hover, a.has-text-info:focus { + color: #0f81cc !important; } + +.has-background-info { + background-color: #209cee !important; } + +.has-text-success { + color: #22c35b !important; } + +a.has-text-success:hover, a.has-text-success:focus { + color: #1a9847 !important; } + +.has-background-success { + background-color: #22c35b !important; } + +.has-text-warning { + color: #ffdd57 !important; } + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #ffd324 !important; } + +.has-background-warning { + background-color: #ffdd57 !important; } + +.has-text-danger { + color: #da0b00 !important; } + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #a70800 !important; } + +.has-background-danger { + background-color: #da0b00 !important; } + +.has-text-black-bis { + color: #121212 !important; } + +.has-background-black-bis { + background-color: #121212 !important; } + +.has-text-black-ter { + color: #242424 !important; } + +.has-background-black-ter { + background-color: #242424 !important; } + +.has-text-grey-darker { + color: #363636 !important; } + +.has-background-grey-darker { + background-color: #363636 !important; } + +.has-text-grey-dark { + color: #4a4a4a !important; } + +.has-background-grey-dark { + background-color: #4a4a4a !important; } + +.has-text-grey { + color: #7a7a7a !important; } + +.has-background-grey { + background-color: #7a7a7a !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: whitesmoke !important; } + +.has-background-white-ter { + background-color: whitesmoke !important; } + +.has-text-white-bis { + color: #fafafa !important; } + +.has-background-white-bis { + background-color: #fafafa !important; } + +.has-text-weight-light { + font-weight: 300 !important; } + +.has-text-weight-normal { + font-weight: 400 !important; } + +.has-text-weight-medium { + font-weight: 500 !important; } + +.has-text-weight-semibold { + font-weight: 600 !important; } + +.has-text-weight-bold { + font-weight: 700 !important; } + +.is-family-primary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.is-marginless { + margin: 0 !important; } + +.is-paddingless { + padding: 0 !important; } + +.is-radiusless { + border-radius: 0 !important; } + +.is-shadowless { + box-shadow: none !important; } + +.is-relative { + position: relative !important; } + +.box { + background-color: white; + border-radius: 6px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #222222; + display: block; + padding: 1.25rem; } + +a.box:hover, a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #2e63b8; } + +a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #2e63b8; } + +.button { + background-color: white; + border-color: #dbdbdb; + border-width: 1px; + color: #363636; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; } + .button strong { + color: inherit; } + .button .icon, .button .icon.is-small, .button #documenter .docs-sidebar form.docs-search > input.icon, #documenter .docs-sidebar .button form.docs-search > input.icon, .button .icon.is-medium, .button .icon.is-large { + height: 1.5em; + width: 1.5em; } + .button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; } + .button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); } + .button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); } + .button:hover, .button.is-hovered { + border-color: #b5b5b5; + color: #363636; } + .button:focus, .button.is-focused { + border-color: #2e63b8; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #222222; + text-decoration: underline; } + .button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { + background-color: whitesmoke; + color: #222222; } + .button.is-text:active, .button.is-text.is-active { + background-color: #e8e8e8; + color: #222222; } + .button.is-text[disabled], + fieldset[disabled] .button.is-text { + background-color: transparent; + border-color: transparent; + box-shadow: none; } + .button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:hover, .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus, .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .button.is-white:active, .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .button.is-white[disabled], + fieldset[disabled] .button.is-white { + background-color: white; + border-color: transparent; + box-shadow: none; } + .button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered { + background-color: black; } + .button.is-white.is-inverted[disabled], + fieldset[disabled] .button.is-white.is-inverted { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; } + .button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused { + background-color: white; + border-color: white; + color: #0a0a0a; } + .button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined[disabled], + fieldset[disabled] .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .button.is-black:hover, .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; } + .button.is-black:focus, .button.is-black.is-focused { + border-color: transparent; + color: white; } + .button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .button.is-black:active, .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; } + .button.is-black[disabled], + fieldset[disabled] .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; } + .button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-black.is-inverted[disabled], + fieldset[disabled] .button.is-black.is-inverted { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined[disabled], + fieldset[disabled] .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-light { + background-color: whitesmoke; + border-color: transparent; + color: #363636; } + .button.is-light:hover, .button.is-light.is-hovered { + background-color: #eeeeee; + border-color: transparent; + color: #363636; } + .button.is-light:focus, .button.is-light.is-focused { + border-color: transparent; + color: #363636; } + .button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .button.is-light:active, .button.is-light.is-active { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; } + .button.is-light[disabled], + fieldset[disabled] .button.is-light { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; } + .button.is-light.is-inverted { + background-color: #363636; + color: whitesmoke; } + .button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered { + background-color: #292929; } + .button.is-light.is-inverted[disabled], + fieldset[disabled] .button.is-light.is-inverted { + background-color: #363636; + border-color: transparent; + box-shadow: none; + color: whitesmoke; } + .button.is-light.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; } + .button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-light.is-outlined[disabled], + fieldset[disabled] .button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; } + .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; } + .button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused { + background-color: #363636; + color: whitesmoke; } + .button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-light.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; } + .button.is-dark, .content kbd.button { + background-color: #363636; + border-color: transparent; + color: whitesmoke; } + .button.is-dark:hover, .content kbd.button:hover, .button.is-dark.is-hovered, .content kbd.button.is-hovered { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; } + .button.is-dark:focus, .content kbd.button:focus, .button.is-dark.is-focused, .content kbd.button.is-focused { + border-color: transparent; + color: whitesmoke; } + .button.is-dark:focus:not(:active), .content kbd.button:focus:not(:active), .button.is-dark.is-focused:not(:active), .content kbd.button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .button.is-dark:active, .content kbd.button:active, .button.is-dark.is-active, .content kbd.button.is-active { + background-color: #292929; + border-color: transparent; + color: whitesmoke; } + .button.is-dark[disabled], .content kbd.button[disabled], + fieldset[disabled] .button.is-dark, + fieldset[disabled] .content kbd.button, + .content fieldset[disabled] kbd.button { + background-color: #363636; + border-color: transparent; + box-shadow: none; } + .button.is-dark.is-inverted, .content kbd.button.is-inverted { + background-color: whitesmoke; + color: #363636; } + .button.is-dark.is-inverted:hover, .content kbd.button.is-inverted:hover, .button.is-dark.is-inverted.is-hovered, .content kbd.button.is-inverted.is-hovered { + background-color: #e8e8e8; } + .button.is-dark.is-inverted[disabled], .content kbd.button.is-inverted[disabled], + fieldset[disabled] .button.is-dark.is-inverted, + fieldset[disabled] .content kbd.button.is-inverted, + .content fieldset[disabled] kbd.button.is-inverted { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; + color: #363636; } + .button.is-dark.is-loading::after, .content kbd.button.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-dark.is-outlined, .content kbd.button.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; } + .button.is-dark.is-outlined:hover, .content kbd.button.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .content kbd.button.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .content kbd.button.is-outlined:focus, .button.is-dark.is-outlined.is-focused, .content kbd.button.is-outlined.is-focused { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .button.is-dark.is-outlined.is-loading::after, .content kbd.button.is-outlined.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-dark.is-outlined.is-loading:hover::after, .content kbd.button.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .content kbd.button.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after, .content kbd.button.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-dark.is-outlined[disabled], .content kbd.button.is-outlined[disabled], + fieldset[disabled] .button.is-dark.is-outlined, + fieldset[disabled] .content kbd.button.is-outlined, + .content fieldset[disabled] kbd.button.is-outlined { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; } + .button.is-dark.is-inverted.is-outlined, .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; } + .button.is-dark.is-inverted.is-outlined:hover, .content kbd.button.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .content kbd.button.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .content kbd.button.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused, .content kbd.button.is-inverted.is-outlined.is-focused { + background-color: whitesmoke; + color: #363636; } + .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-dark.is-inverted.is-outlined[disabled], .content kbd.button.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-dark.is-inverted.is-outlined, + fieldset[disabled] .content kbd.button.is-inverted.is-outlined, + .content fieldset[disabled] kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; } + .button.is-primary, .docstring > section > a.button.docs-sourcelink { + background-color: #4eb5de; + border-color: transparent; + color: #fff; } + .button.is-primary:hover, .docstring > section > a.button.docs-sourcelink:hover, .button.is-primary.is-hovered, .docstring > section > a.button.is-hovered.docs-sourcelink { + background-color: #43b1dc; + border-color: transparent; + color: #fff; } + .button.is-primary:focus, .docstring > section > a.button.docs-sourcelink:focus, .button.is-primary.is-focused, .docstring > section > a.button.is-focused.docs-sourcelink { + border-color: transparent; + color: #fff; } + .button.is-primary:focus:not(:active), .docstring > section > a.button.docs-sourcelink:focus:not(:active), .button.is-primary.is-focused:not(:active), .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .button.is-primary:active, .docstring > section > a.button.docs-sourcelink:active, .button.is-primary.is-active, .docstring > section > a.button.is-active.docs-sourcelink { + background-color: #39acda; + border-color: transparent; + color: #fff; } + .button.is-primary[disabled], .docstring > section > a.button.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary, + fieldset[disabled] .docstring > section > a.button.docs-sourcelink { + background-color: #4eb5de; + border-color: transparent; + box-shadow: none; } + .button.is-primary.is-inverted, .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + color: #4eb5de; } + .button.is-primary.is-inverted:hover, .docstring > section > a.button.is-inverted.docs-sourcelink:hover, .button.is-primary.is-inverted.is-hovered, .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { + background-color: #f2f2f2; } + .button.is-primary.is-inverted[disabled], .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-inverted, + fieldset[disabled] .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #4eb5de; } + .button.is-primary.is-loading::after, .docstring > section > a.button.is-loading.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined, .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #4eb5de; + color: #4eb5de; } + .button.is-primary.is-outlined:hover, .docstring > section > a.button.is-outlined.docs-sourcelink:hover, .button.is-primary.is-outlined.is-hovered, .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-outlined:focus, .docstring > section > a.button.is-outlined.docs-sourcelink:focus, .button.is-primary.is-outlined.is-focused, .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { + background-color: #4eb5de; + border-color: #4eb5de; + color: #fff; } + .button.is-primary.is-outlined.is-loading::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { + border-color: transparent transparent #4eb5de #4eb5de !important; } + .button.is-primary.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined[disabled], .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-outlined, + fieldset[disabled] .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #4eb5de; + box-shadow: none; + color: #4eb5de; } + .button.is-primary.is-inverted.is-outlined, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-primary.is-inverted.is-outlined:hover, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-inverted.is-outlined:focus, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, .button.is-primary.is-inverted.is-outlined.is-focused, .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { + background-color: #fff; + color: #4eb5de; } + .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #4eb5de #4eb5de !important; } + .button.is-primary.is-inverted.is-outlined[disabled], .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-inverted.is-outlined, + fieldset[disabled] .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-link { + background-color: #2e63b8; + border-color: transparent; + color: #fff; } + .button.is-link:hover, .button.is-link.is-hovered { + background-color: #2b5eae; + border-color: transparent; + color: #fff; } + .button.is-link:focus, .button.is-link.is-focused { + border-color: transparent; + color: #fff; } + .button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button.is-link:active, .button.is-link.is-active { + background-color: #2958a4; + border-color: transparent; + color: #fff; } + .button.is-link[disabled], + fieldset[disabled] .button.is-link { + background-color: #2e63b8; + border-color: transparent; + box-shadow: none; } + .button.is-link.is-inverted { + background-color: #fff; + color: #2e63b8; } + .button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-link.is-inverted[disabled], + fieldset[disabled] .button.is-link.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #2e63b8; } + .button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined { + background-color: transparent; + border-color: #2e63b8; + color: #2e63b8; } + .button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + .button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #2e63b8 #2e63b8 !important; } + .button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined[disabled], + fieldset[disabled] .button.is-link.is-outlined { + background-color: transparent; + border-color: #2e63b8; + box-shadow: none; + color: #2e63b8; } + .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #2e63b8; } + .button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #2e63b8 #2e63b8 !important; } + .button.is-link.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-info { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .button.is-info:hover, .button.is-info.is-hovered { + background-color: #1496ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #118fe4; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], + fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: transparent; + box-shadow: none; } + .button.is-info.is-inverted { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-info.is-inverted[disabled], + fieldset[disabled] .button.is-info.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #209cee; } + .button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + color: #209cee; } + .button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined[disabled], + fieldset[disabled] .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + box-shadow: none; + color: #209cee; } + .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-success { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .button.is-success:hover, .button.is-success.is-hovered { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .button.is-success:focus, .button.is-success.is-focused { + border-color: transparent; + color: #fff; } + .button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .button.is-success:active, .button.is-success.is-active { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .button.is-success[disabled], + fieldset[disabled] .button.is-success { + background-color: #22c35b; + border-color: transparent; + box-shadow: none; } + .button.is-success.is-inverted { + background-color: #fff; + color: #22c35b; } + .button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-success.is-inverted[disabled], + fieldset[disabled] .button.is-success.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #22c35b; } + .button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined { + background-color: transparent; + border-color: #22c35b; + color: #22c35b; } + .button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused { + background-color: #22c35b; + border-color: #22c35b; + color: #fff; } + .button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #22c35b #22c35b !important; } + .button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined[disabled], + fieldset[disabled] .button.is-success.is-outlined { + background-color: transparent; + border-color: #22c35b; + box-shadow: none; + color: #22c35b; } + .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #22c35b; } + .button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #22c35b #22c35b !important; } + .button.is-success.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-warning { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:hover, .button.is-warning.is-hovered { + background-color: #ffdb4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83d; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], + fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: transparent; + box-shadow: none; } + .button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered { + background-color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-inverted[disabled], + fieldset[disabled] .button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + border-color: transparent; + box-shadow: none; + color: #ffdd57; } + .button.is-warning.is-loading::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } + .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + color: #ffdd57; } + .button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; } + .button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } + .button.is-warning.is-outlined[disabled], + fieldset[disabled] .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + box-shadow: none; + color: #ffdd57; } + .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; } + .button.is-warning.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + box-shadow: none; + color: rgba(0, 0, 0, 0.7); } + .button.is-danger { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .button.is-danger:hover, .button.is-danger.is-hovered { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .button.is-danger:focus, .button.is-danger.is-focused { + border-color: transparent; + color: #fff; } + .button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .button.is-danger:active, .button.is-danger.is-active { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .button.is-danger[disabled], + fieldset[disabled] .button.is-danger { + background-color: #da0b00; + border-color: transparent; + box-shadow: none; } + .button.is-danger.is-inverted { + background-color: #fff; + color: #da0b00; } + .button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-danger.is-inverted[disabled], + fieldset[disabled] .button.is-danger.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #da0b00; } + .button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined { + background-color: transparent; + border-color: #da0b00; + color: #da0b00; } + .button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused { + background-color: #da0b00; + border-color: #da0b00; + color: #fff; } + .button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #da0b00 #da0b00 !important; } + .button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined[disabled], + fieldset[disabled] .button.is-danger.is-outlined { + background-color: transparent; + border-color: #da0b00; + box-shadow: none; + color: #da0b00; } + .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #da0b00; } + .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #da0b00 #da0b00 !important; } + .button.is-danger.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-small, #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 2px; + font-size: 0.75rem; } + .button.is-normal { + font-size: 1rem; } + .button.is-medium { + font-size: 1.25rem; } + .button.is-large { + font-size: 1.5rem; } + .button[disabled], + fieldset[disabled] .button { + background-color: white; + border-color: #dbdbdb; + box-shadow: none; + opacity: 0.5; } + .button.is-fullwidth { + display: flex; + width: 100%; } + .button.is-loading { + color: transparent !important; + pointer-events: none; } + .button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; } + .button.is-static { + background-color: whitesmoke; + border-color: #dbdbdb; + color: #7a7a7a; + box-shadow: none; + pointer-events: none; } + .button.is-rounded, #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .buttons .button { + margin-bottom: 0.5rem; } + .buttons .button:not(:last-child):not(.is-fullwidth) { + margin-right: 0.5rem; } + .buttons:last-child { + margin-bottom: -0.5rem; } + .buttons:not(:last-child) { + margin-bottom: 1rem; } + .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { + border-radius: 2px; + font-size: 0.75rem; } + .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { + font-size: 1.25rem; } + .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { + font-size: 1.5rem; } + .buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; } + .buttons.has-addons .button:last-child { + margin-right: 0; } + .buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { + z-index: 2; } + .buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { + z-index: 3; } + .buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { + z-index: 4; } + .buttons.has-addons .button.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .buttons.is-centered { + justify-content: center; } + .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + .buttons.is-right { + justify-content: flex-end; } + .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + +.container { + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; } + @media screen and (min-width: 1056px) { + .container { + max-width: 992px; } + .container.is-fluid { + margin-left: 32px; + margin-right: 32px; + max-width: none; } } + @media screen and (max-width: 1215px) { + .container.is-widescreen { + max-width: 1152px; } } + @media screen and (max-width: 1407px) { + .container.is-fullhd { + max-width: 1344px; } } + @media screen and (min-width: 1216px) { + .container { + max-width: 1152px; } } + @media screen and (min-width: 1408px) { + .container { + max-width: 1344px; } } + +.content li + li { + margin-top: 0.25em; } + +.content p:not(:last-child), +.content dl:not(:last-child), +.content ol:not(:last-child), +.content ul:not(:last-child), +.content blockquote:not(:last-child), +.content pre:not(:last-child), +.content table:not(:last-child) { + margin-bottom: 1em; } + +.content h1, +.content h2, +.content h3, +.content h4, +.content h5, +.content h6 { + color: #222222; + font-weight: 600; + line-height: 1.125; } + +.content h1 { + font-size: 2em; + margin-bottom: 0.5em; } + .content h1:not(:first-child) { + margin-top: 1em; } + +.content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; } + .content h2:not(:first-child) { + margin-top: 1.1428em; } + +.content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; } + .content h3:not(:first-child) { + margin-top: 1.3333em; } + +.content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; } + +.content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; } + +.content h6 { + font-size: 1em; + margin-bottom: 1em; } + +.content blockquote { + background-color: whitesmoke; + border-left: 5px solid #dbdbdb; + padding: 1.25em 1.5em; } + +.content ol { + list-style-position: outside; + margin-left: 2em; + margin-top: 1em; } + .content ol:not([type]) { + list-style-type: decimal; } + .content ol:not([type]).is-lower-alpha { + list-style-type: lower-alpha; } + .content ol:not([type]).is-lower-roman { + list-style-type: lower-roman; } + .content ol:not([type]).is-upper-alpha { + list-style-type: upper-alpha; } + .content ol:not([type]).is-upper-roman { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0.7rem 0.5rem; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #222222; } + .content table th:not([align]) { + text-align: left; } + .content table thead td, + .content table thead th { + border-width: 0 0 2px; + color: #222222; } + .content table tfoot td, + .content table tfoot th { + border-width: 2px 0 0; + color: #222222; } + .content table tbody tr:last-child td, + .content table tbody tr:last-child th { + border-bottom-width: 0; } + +.content .tabs li + li { + margin-top: 0; } + +.content.is-small, #documenter .docs-sidebar form.docs-search > input.content { + font-size: 0.75rem; } + +.content.is-medium { + font-size: 1.25rem; } + +.content.is-large { + font-size: 1.5rem; } + +.icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; } + .icon.is-small, #documenter .docs-sidebar form.docs-search > input.icon { + height: 1rem; + width: 1rem; } + .icon.is-medium { + height: 2rem; + width: 2rem; } + .icon.is-large { + height: 3rem; + width: 3rem; } + +.image, #documenter .docs-sidebar .docs-logo > img { + display: block; + position: relative; } + .image img, #documenter .docs-sidebar .docs-logo > img img { + display: block; + height: auto; + width: 100%; } + .image img.is-rounded, #documenter .docs-sidebar .docs-logo > img img.is-rounded { + border-radius: 290486px; } + .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, + .image.is-square .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, + .image.is-1by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, + .image.is-5by4 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, + .image.is-4by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, + .image.is-3by2 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, + .image.is-5by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, + .image.is-16by9 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, + .image.is-2by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, + .image.is-3by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, + .image.is-4by5 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, + .image.is-3by4 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, + .image.is-2by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, + .image.is-3by5 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, + .image.is-9by16 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, + .image.is-1by2 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, + .image.is-1by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { + height: 100%; + width: 100%; } + .image.is-square, #documenter .docs-sidebar .docs-logo > img.is-square, .image.is-1by1, #documenter .docs-sidebar .docs-logo > img.is-1by1 { + padding-top: 100%; } + .image.is-5by4, #documenter .docs-sidebar .docs-logo > img.is-5by4 { + padding-top: 80%; } + .image.is-4by3, #documenter .docs-sidebar .docs-logo > img.is-4by3 { + padding-top: 75%; } + .image.is-3by2, #documenter .docs-sidebar .docs-logo > img.is-3by2 { + padding-top: 66.6666%; } + .image.is-5by3, #documenter .docs-sidebar .docs-logo > img.is-5by3 { + padding-top: 60%; } + .image.is-16by9, #documenter .docs-sidebar .docs-logo > img.is-16by9 { + padding-top: 56.25%; } + .image.is-2by1, #documenter .docs-sidebar .docs-logo > img.is-2by1 { + padding-top: 50%; } + .image.is-3by1, #documenter .docs-sidebar .docs-logo > img.is-3by1 { + padding-top: 33.3333%; } + .image.is-4by5, #documenter .docs-sidebar .docs-logo > img.is-4by5 { + padding-top: 125%; } + .image.is-3by4, #documenter .docs-sidebar .docs-logo > img.is-3by4 { + padding-top: 133.3333%; } + .image.is-2by3, #documenter .docs-sidebar .docs-logo > img.is-2by3 { + padding-top: 150%; } + .image.is-3by5, #documenter .docs-sidebar .docs-logo > img.is-3by5 { + padding-top: 166.6666%; } + .image.is-9by16, #documenter .docs-sidebar .docs-logo > img.is-9by16 { + padding-top: 177.7777%; } + .image.is-1by2, #documenter .docs-sidebar .docs-logo > img.is-1by2 { + padding-top: 200%; } + .image.is-1by3, #documenter .docs-sidebar .docs-logo > img.is-1by3 { + padding-top: 300%; } + .image.is-16x16, #documenter .docs-sidebar .docs-logo > img.is-16x16 { + height: 16px; + width: 16px; } + .image.is-24x24, #documenter .docs-sidebar .docs-logo > img.is-24x24 { + height: 24px; + width: 24px; } + .image.is-32x32, #documenter .docs-sidebar .docs-logo > img.is-32x32 { + height: 32px; + width: 32px; } + .image.is-48x48, #documenter .docs-sidebar .docs-logo > img.is-48x48 { + height: 48px; + width: 48px; } + .image.is-64x64, #documenter .docs-sidebar .docs-logo > img.is-64x64 { + height: 64px; + width: 64px; } + .image.is-96x96, #documenter .docs-sidebar .docs-logo > img.is-96x96 { + height: 96px; + width: 96px; } + .image.is-128x128, #documenter .docs-sidebar .docs-logo > img.is-128x128 { + height: 128px; + width: 128px; } + +.notification { + background-color: whitesmoke; + border-radius: 4px; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; } + .notification a:not(.button):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .notification strong { + color: currentColor; } + .notification code, + .notification pre { + background: white; } + .notification pre code { + background: transparent; } + .notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; } + .notification .title, + .notification .subtitle, + .notification .content { + color: currentColor; } + .notification.is-white { + background-color: white; + color: #0a0a0a; } + .notification.is-black { + background-color: #0a0a0a; + color: white; } + .notification.is-light { + background-color: whitesmoke; + color: #363636; } + .notification.is-dark, .content kbd.notification { + background-color: #363636; + color: whitesmoke; } + .notification.is-primary, .docstring > section > a.notification.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .notification.is-link { + background-color: #2e63b8; + color: #fff; } + .notification.is-info { + background-color: #209cee; + color: #fff; } + .notification.is-success { + background-color: #22c35b; + color: #fff; } + .notification.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .notification.is-danger { + background-color: #da0b00; + color: #fff; } + +.progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 1rem; + overflow: hidden; + padding: 0; + width: 100%; } + .progress::-webkit-progress-bar { + background-color: #dbdbdb; } + .progress::-webkit-progress-value { + background-color: #222222; } + .progress::-moz-progress-bar { + background-color: #222222; } + .progress::-ms-fill { + background-color: #222222; + border: none; } + .progress.is-white::-webkit-progress-value { + background-color: white; } + .progress.is-white::-moz-progress-bar { + background-color: white; } + .progress.is-white::-ms-fill { + background-color: white; } + .progress.is-white:indeterminate { + background-image: linear-gradient(to right, white 30%, #dbdbdb 30%); } + .progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; } + .progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; } + .progress.is-black::-ms-fill { + background-color: #0a0a0a; } + .progress.is-black:indeterminate { + background-image: linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%); } + .progress.is-light::-webkit-progress-value { + background-color: whitesmoke; } + .progress.is-light::-moz-progress-bar { + background-color: whitesmoke; } + .progress.is-light::-ms-fill { + background-color: whitesmoke; } + .progress.is-light:indeterminate { + background-image: linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%); } + .progress.is-dark::-webkit-progress-value, .content kbd.progress::-webkit-progress-value { + background-color: #363636; } + .progress.is-dark::-moz-progress-bar, .content kbd.progress::-moz-progress-bar { + background-color: #363636; } + .progress.is-dark::-ms-fill, .content kbd.progress::-ms-fill { + background-color: #363636; } + .progress.is-dark:indeterminate, .content kbd.progress:indeterminate { + background-image: linear-gradient(to right, #363636 30%, #dbdbdb 30%); } + .progress.is-primary::-webkit-progress-value, .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { + background-color: #4eb5de; } + .progress.is-primary::-moz-progress-bar, .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { + background-color: #4eb5de; } + .progress.is-primary::-ms-fill, .docstring > section > a.progress.docs-sourcelink::-ms-fill { + background-color: #4eb5de; } + .progress.is-primary:indeterminate, .docstring > section > a.progress.docs-sourcelink:indeterminate { + background-image: linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%); } + .progress.is-link::-webkit-progress-value { + background-color: #2e63b8; } + .progress.is-link::-moz-progress-bar { + background-color: #2e63b8; } + .progress.is-link::-ms-fill { + background-color: #2e63b8; } + .progress.is-link:indeterminate { + background-image: linear-gradient(to right, #2e63b8 30%, #dbdbdb 30%); } + .progress.is-info::-webkit-progress-value { + background-color: #209cee; } + .progress.is-info::-moz-progress-bar { + background-color: #209cee; } + .progress.is-info::-ms-fill { + background-color: #209cee; } + .progress.is-info:indeterminate { + background-image: linear-gradient(to right, #209cee 30%, #dbdbdb 30%); } + .progress.is-success::-webkit-progress-value { + background-color: #22c35b; } + .progress.is-success::-moz-progress-bar { + background-color: #22c35b; } + .progress.is-success::-ms-fill { + background-color: #22c35b; } + .progress.is-success:indeterminate { + background-image: linear-gradient(to right, #22c35b 30%, #dbdbdb 30%); } + .progress.is-warning::-webkit-progress-value { + background-color: #ffdd57; } + .progress.is-warning::-moz-progress-bar { + background-color: #ffdd57; } + .progress.is-warning::-ms-fill { + background-color: #ffdd57; } + .progress.is-warning:indeterminate { + background-image: linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%); } + .progress.is-danger::-webkit-progress-value { + background-color: #da0b00; } + .progress.is-danger::-moz-progress-bar { + background-color: #da0b00; } + .progress.is-danger::-ms-fill { + background-color: #da0b00; } + .progress.is-danger:indeterminate { + background-image: linear-gradient(to right, #da0b00 30%, #dbdbdb 30%); } + .progress:indeterminate { + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-name: moveIndeterminate; + animation-timing-function: linear; + background-color: #dbdbdb; + background-image: linear-gradient(to right, #222222 30%, #dbdbdb 30%); + background-position: top left; + background-repeat: no-repeat; + background-size: 150% 150%; } + .progress:indeterminate::-webkit-progress-bar { + background-color: transparent; } + .progress:indeterminate::-moz-progress-bar { + background-color: transparent; } + .progress.is-small, #documenter .docs-sidebar form.docs-search > input.progress { + height: 0.75rem; } + .progress.is-medium { + height: 1.25rem; } + .progress.is-large { + height: 1.5rem; } + +@keyframes moveIndeterminate { + from { + background-position: 200% 0; } + to { + background-position: -200% 0; } } + +.table { + background-color: white; + color: #363636; } + .table td, + .table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .table td.is-white, + .table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; } + .table td.is-black, + .table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .table td.is-light, + .table th.is-light { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .table td.is-dark, + .table th.is-dark { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .table td.is-primary, + .table th.is-primary { + background-color: #4eb5de; + border-color: #4eb5de; + color: #fff; } + .table td.is-link, + .table th.is-link { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + .table td.is-info, + .table th.is-info { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .table td.is-success, + .table th.is-success { + background-color: #22c35b; + border-color: #22c35b; + color: #fff; } + .table td.is-warning, + .table th.is-warning { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .table td.is-danger, + .table th.is-danger { + background-color: #da0b00; + border-color: #da0b00; + color: #fff; } + .table td.is-narrow, + .table th.is-narrow { + white-space: nowrap; + width: 1%; } + .table td.is-selected, + .table th.is-selected { + background-color: #4eb5de; + color: #fff; } + .table td.is-selected a, + .table td.is-selected strong, + .table th.is-selected a, + .table th.is-selected strong { + color: currentColor; } + .table th { + color: #222222; } + .table th:not([align]) { + text-align: left; } + .table tr.is-selected { + background-color: #4eb5de; + color: #fff; } + .table tr.is-selected a, + .table tr.is-selected strong { + color: currentColor; } + .table tr.is-selected td, + .table tr.is-selected th { + border-color: #fff; + color: currentColor; } + .table thead { + background-color: transparent; } + .table thead td, + .table thead th { + border-width: 0 0 2px; + color: #222222; } + .table tfoot { + background-color: transparent; } + .table tfoot td, + .table tfoot th { + border-width: 2px 0 0; + color: #222222; } + .table tbody { + background-color: transparent; } + .table tbody tr:last-child td, + .table tbody tr:last-child th { + border-bottom-width: 0; } + .table.is-bordered td, + .table.is-bordered th { + border-width: 1px; } + .table.is-bordered tr:last-child td, + .table.is-bordered tr:last-child th { + border-bottom-width: 1px; } + .table.is-fullwidth { + width: 100%; } + .table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #fafafa; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: #fafafa; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { + background-color: whitesmoke; } + .table.is-narrow td, + .table.is-narrow th { + padding: 0.25em 0.5em; } + .table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #fafafa; } + +.table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; } + +.tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .tags .tag, .tags .docstring > section > a.docs-sourcelink, .tags .content kbd, .content .tags kbd { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child) { + margin-right: 0.5rem; } + .tags:last-child { + margin-bottom: -0.5rem; } + .tags:not(:last-child) { + margin-bottom: 1rem; } + .tags.are-medium .tag:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), .tags.are-medium .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .docstring > section > a.docs-sourcelink, .tags.is-centered .content kbd, .content .tags.is-centered kbd { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .docstring > section > a.docs-sourcelink, .tags.has-addons .content kbd, .content .tags.has-addons kbd { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body) { + align-items: center; + background-color: whitesmoke; + border-radius: 4px; + color: #222222; + display: inline-flex; + font-size: 0.75rem; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + .tag:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete, .content kbd:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag:not(body).is-white, .docstring > section > a.docs-sourcelink:not(body).is-white, .content kbd:not(body).is-white { + background-color: white; + color: #0a0a0a; } + .tag:not(body).is-black, .docstring > section > a.docs-sourcelink:not(body).is-black, .content kbd:not(body).is-black { + background-color: #0a0a0a; + color: white; } + .tag:not(body).is-light, .docstring > section > a.docs-sourcelink:not(body).is-light, .content kbd:not(body).is-light { + background-color: whitesmoke; + color: #363636; } + .tag:not(body).is-dark, .docstring > section > a.docs-sourcelink:not(body).is-dark, .content kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag:not(body).is-primary, .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body).is-primary { + background-color: #4eb5de; + color: #fff; } + .tag:not(body).is-link, .docstring > section > a.docs-sourcelink:not(body).is-link, .content kbd:not(body).is-link { + background-color: #2e63b8; + color: #fff; } + .tag:not(body).is-info, .docstring > section > a.docs-sourcelink:not(body).is-info, .content kbd:not(body).is-info { + background-color: #209cee; + color: #fff; } + .tag:not(body).is-success, .docstring > section > a.docs-sourcelink:not(body).is-success, .content kbd:not(body).is-success { + background-color: #22c35b; + color: #fff; } + .tag:not(body).is-warning, .docstring > section > a.docs-sourcelink:not(body).is-warning, .content kbd:not(body).is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag:not(body).is-danger, .docstring > section > a.docs-sourcelink:not(body).is-danger, .content kbd:not(body).is-danger { + background-color: #da0b00; + color: #fff; } + .tag:not(body).is-normal, .docstring > section > a.docs-sourcelink:not(body).is-normal, .content kbd:not(body).is-normal { + font-size: 0.75rem; } + .tag:not(body).is-medium, .docstring > section > a.docs-sourcelink:not(body).is-medium, .content kbd:not(body).is-medium { + font-size: 1rem; } + .tag:not(body).is-large, .docstring > section > a.docs-sourcelink:not(body).is-large, .content kbd:not(body).is-large { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag:not(body).is-delete, .docstring > section > a.docs-sourcelink:not(body).is-delete, .content kbd:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before, .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before { + height: 1px; + width: 50%; } + .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { + height: 50%; + width: 1px; } + .tag:not(body).is-delete:hover, .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, .content kbd:not(body).is-delete:hover, .tag:not(body).is-delete:focus, .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, .content kbd:not(body).is-delete:focus { + background-color: #e8e8e8; } + .tag:not(body).is-delete:active, .docstring > section > a.docs-sourcelink:not(body).is-delete:active, .content kbd:not(body).is-delete:active { + background-color: #dbdbdb; } + .tag:not(body).is-rounded, .docstring > section > a.docs-sourcelink:not(body).is-rounded, .content kbd:not(body).is-rounded, #documenter .docs-sidebar form.docs-search > input.tag:not(body) { + border-radius: 290486px; } + +a.tag:hover, .docstring > section > a.docs-sourcelink:hover { + text-decoration: underline; } + +.title, +.subtitle { + word-break: break-word; } + .title em, + .title span, + .subtitle em, + .subtitle span { + font-weight: inherit; } + .title sub, + .subtitle sub { + font-size: 0.75em; } + .title sup, + .subtitle sup { + font-size: 0.75em; } + .title .tag, .title .docstring > section > a.docs-sourcelink, .title .content kbd, .content .title kbd, + .subtitle .tag, + .subtitle .docstring > section > a.docs-sourcelink, + .subtitle .content kbd, + .content .subtitle kbd { + vertical-align: middle; } + +.title { + color: #363636; + font-size: 2rem; + font-weight: 600; + line-height: 1.125; } + .title strong { + color: inherit; + font-weight: inherit; } + .title + .highlight { + margin-top: -0.75rem; } + .title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; } + .title.is-1 { + font-size: 3rem; } + .title.is-2 { + font-size: 2.5rem; } + .title.is-3 { + font-size: 2rem; } + .title.is-4 { + font-size: 1.5rem; } + .title.is-5 { + font-size: 1.25rem; } + .title.is-6 { + font-size: 1rem; } + .title.is-7 { + font-size: 0.75rem; } + +.subtitle { + color: #4a4a4a; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; } + .subtitle strong { + color: #363636; + font-weight: 600; } + .subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; } + .subtitle.is-1 { + font-size: 3rem; } + .subtitle.is-2 { + font-size: 2.5rem; } + .subtitle.is-3 { + font-size: 2rem; } + .subtitle.is-4 { + font-size: 1.5rem; } + .subtitle.is-5 { + font-size: 1.25rem; } + .subtitle.is-6 { + font-size: 1rem; } + .subtitle.is-7 { + font-size: 0.75rem; } + +.heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; } + +.highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; } + .highlight pre { + overflow: auto; + max-width: 100%; } + +.number { + align-items: center; + background-color: whitesmoke; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; } + +.input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .textarea:hover, .select select:hover, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered, .is-hovered.textarea, .select select.is-hovered { + border-color: #b5b5b5; } + .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], + fieldset[disabled] .input, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] .textarea, + fieldset[disabled] .select select, + .select fieldset[disabled] select { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #7a7a7a; } + .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder, + fieldset[disabled] .input::-moz-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder, + fieldset[disabled] .textarea::-moz-placeholder, + fieldset[disabled] .select select::-moz-placeholder, + .select fieldset[disabled] select::-moz-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder, + fieldset[disabled] .input::-webkit-input-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder, + fieldset[disabled] .textarea::-webkit-input-placeholder, + fieldset[disabled] .select select::-webkit-input-placeholder, + .select fieldset[disabled] select::-webkit-input-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder, + fieldset[disabled] .input:-moz-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder, + fieldset[disabled] .textarea:-moz-placeholder, + fieldset[disabled] .select select:-moz-placeholder, + .select fieldset[disabled] select:-moz-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder, + fieldset[disabled] .input:-ms-input-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder, + fieldset[disabled] .textarea:-ms-input-placeholder, + fieldset[disabled] .select select:-ms-input-placeholder, + .select fieldset[disabled] select:-ms-input-placeholder { + color: rgba(122, 122, 122, 0.3); } + +.input, #documenter .docs-sidebar form.docs-search > input, .textarea { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly], .textarea[readonly] { + box-shadow: none; } + .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white, .is-white.textarea { + border-color: white; } + .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.textarea:focus, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, .is-white.is-focused.textarea, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.textarea:active, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-active, .is-white.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black, .is-black.textarea { + border-color: #0a0a0a; } + .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.textarea:focus, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, .is-black.is-focused.textarea, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.textarea:active, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-active, .is-black.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light, .is-light.textarea { + border-color: whitesmoke; } + .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.textarea:focus, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, .is-light.is-focused.textarea, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.textarea:active, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-active, .is-light.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.input, .content kbd.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .is-dark.textarea, .content kbd.textarea { + border-color: #363636; } + .is-dark.input:focus, .content kbd.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.is-focused.input, .content kbd.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.input:active, .content kbd.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.is-active.input, .content kbd.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, .is-dark.is-active.textarea, .content kbd.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.input, .docstring > section > a.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary, .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.input:focus, .docstring > section > a.input.docs-sourcelink:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.is-focused.input, .docstring > section > a.is-focused.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.input:active, .docstring > section > a.input.docs-sourcelink:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.is-active.input, .docstring > section > a.is-active.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link, .is-link.textarea { + border-color: #2e63b8; } + .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.textarea:focus, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, .is-link.is-focused.textarea, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.textarea:active, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-active, .is-link.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info, .is-info.textarea { + border-color: #209cee; } + .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.textarea:focus, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, .is-info.is-focused.textarea, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.textarea:active, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-active, .is-info.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success, .is-success.textarea { + border-color: #22c35b; } + .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.textarea:focus, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, .is-success.is-focused.textarea, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.textarea:active, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-active, .is-success.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning, .is-warning.textarea { + border-color: #ffdd57; } + .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, .is-warning.is-focused.textarea, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.textarea:active, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, .is-warning.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger, .is-danger.textarea { + border-color: #da0b00; } + .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, .is-danger.is-focused.textarea, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.textarea:active, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, .is-danger.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.input, #documenter .docs-sidebar form.docs-search > input, .is-small.textarea { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium, .is-medium.textarea { + font-size: 1.25rem; } + .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large, .is-large.textarea { + font-size: 1.5rem; } + .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth, .is-fullwidth.textarea { + display: block; + width: 100%; } + .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline, .is-inline.textarea { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.input.is-static, #documenter .docs-sidebar form.docs-search > input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; } + +.textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; } + .textarea:not([rows]) { + max-height: 600px; + min-height: 120px; } + .textarea[rows] { + height: initial; } + .textarea.has-fixed-size { + resize: none; } + +.checkbox, .radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .checkbox input, .radio input { + cursor: pointer; } + .checkbox:hover, .radio:hover { + color: #363636; } + .checkbox[disabled], .radio[disabled], + fieldset[disabled] .checkbox, + fieldset[disabled] .radio { + color: #7a7a7a; + cursor: not-allowed; } + +.radio + .radio { + margin-left: 0.5em; } + +.select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; } + .select:not(.is-multiple) { + height: 2.25em; } + .select:not(.is-multiple):not(.is-loading)::after { + border-color: #2e63b8; + right: 1.125em; + z-index: 4; } + .select.is-rounded select, #documenter .docs-sidebar form.docs-search > input.select select { + border-radius: 290486px; + padding-left: 1em; } + .select select { + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; } + .select select::-ms-expand { + display: none; } + .select select[disabled]:hover, + fieldset[disabled] .select select:hover { + border-color: whitesmoke; } + .select select:not([multiple]) { + padding-right: 2.5em; } + .select select[multiple] { + height: auto; + padding: 0; } + .select select[multiple] option { + padding: 0.5em 1em; } + .select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #363636; } + .select.is-white:not(:hover)::after { + border-color: white; } + .select.is-white select { + border-color: white; } + .select.is-white select:hover, .select.is-white select.is-hovered { + border-color: #f2f2f2; } + .select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .select.is-black:not(:hover)::after { + border-color: #0a0a0a; } + .select.is-black select { + border-color: #0a0a0a; } + .select.is-black select:hover, .select.is-black select.is-hovered { + border-color: black; } + .select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .select.is-light:not(:hover)::after { + border-color: whitesmoke; } + .select.is-light select { + border-color: whitesmoke; } + .select.is-light select:hover, .select.is-light select.is-hovered { + border-color: #e8e8e8; } + .select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .select.is-dark:not(:hover)::after, .content kbd.select:not(:hover)::after { + border-color: #363636; } + .select.is-dark select, .content kbd.select select { + border-color: #363636; } + .select.is-dark select:hover, .content kbd.select select:hover, .select.is-dark select.is-hovered, .content kbd.select select.is-hovered { + border-color: #292929; } + .select.is-dark select:focus, .content kbd.select select:focus, .select.is-dark select.is-focused, .content kbd.select select.is-focused, .select.is-dark select:active, .content kbd.select select:active, .select.is-dark select.is-active, .content kbd.select select.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .select.is-primary:not(:hover)::after, .docstring > section > a.select.docs-sourcelink:not(:hover)::after { + border-color: #4eb5de; } + .select.is-primary select, .docstring > section > a.select.docs-sourcelink select { + border-color: #4eb5de; } + .select.is-primary select:hover, .docstring > section > a.select.docs-sourcelink select:hover, .select.is-primary select.is-hovered, .docstring > section > a.select.docs-sourcelink select.is-hovered { + border-color: #39acda; } + .select.is-primary select:focus, .docstring > section > a.select.docs-sourcelink select:focus, .select.is-primary select.is-focused, .docstring > section > a.select.docs-sourcelink select.is-focused, .select.is-primary select:active, .docstring > section > a.select.docs-sourcelink select:active, .select.is-primary select.is-active, .docstring > section > a.select.docs-sourcelink select.is-active { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .select.is-link:not(:hover)::after { + border-color: #2e63b8; } + .select.is-link select { + border-color: #2e63b8; } + .select.is-link select:hover, .select.is-link select.is-hovered { + border-color: #2958a4; } + .select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select.is-info:not(:hover)::after { + border-color: #209cee; } + .select.is-info select { + border-color: #209cee; } + .select.is-info select:hover, .select.is-info select.is-hovered { + border-color: #118fe4; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83d; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #7a7a7a; } + .select.is-fullwidth { + width: 100%; } + .select.is-fullwidth select { + width: 100%; } + .select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + transform: none; } + .select.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { + font-size: 0.75rem; } + .select.is-loading.is-medium:after { + font-size: 1.25rem; } + .select.is-loading.is-large:after { + font-size: 1.5rem; } + +.file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; } + .file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; } + .file.is-white:active .file-cta, .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; } + .file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; } + .file.is-black:active .file-cta, .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; } + .file.is-light .file-cta { + background-color: whitesmoke; + border-color: transparent; + color: #363636; } + .file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { + background-color: #eeeeee; + border-color: transparent; + color: #363636; } + .file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); + color: #363636; } + .file.is-light:active .file-cta, .file.is-light.is-active .file-cta { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; } + .file.is-dark .file-cta, .content kbd.file .file-cta { + background-color: #363636; + border-color: transparent; + color: whitesmoke; } + .file.is-dark:hover .file-cta, .content kbd.file:hover .file-cta, .file.is-dark.is-hovered .file-cta, .content kbd.file.is-hovered .file-cta { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; } + .file.is-dark:focus .file-cta, .content kbd.file:focus .file-cta, .file.is-dark.is-focused .file-cta, .content kbd.file.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); + color: whitesmoke; } + .file.is-dark:active .file-cta, .content kbd.file:active .file-cta, .file.is-dark.is-active .file-cta, .content kbd.file.is-active .file-cta { + background-color: #292929; + border-color: transparent; + color: whitesmoke; } + .file.is-primary .file-cta, .docstring > section > a.file.docs-sourcelink .file-cta { + background-color: #4eb5de; + border-color: transparent; + color: #fff; } + .file.is-primary:hover .file-cta, .docstring > section > a.file.docs-sourcelink:hover .file-cta, .file.is-primary.is-hovered .file-cta, .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { + background-color: #43b1dc; + border-color: transparent; + color: #fff; } + .file.is-primary:focus .file-cta, .docstring > section > a.file.docs-sourcelink:focus .file-cta, .file.is-primary.is-focused .file-cta, .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(78, 181, 222, 0.25); + color: #fff; } + .file.is-primary:active .file-cta, .docstring > section > a.file.docs-sourcelink:active .file-cta, .file.is-primary.is-active .file-cta, .docstring > section > a.file.is-active.docs-sourcelink .file-cta { + background-color: #39acda; + border-color: transparent; + color: #fff; } + .file.is-link .file-cta { + background-color: #2e63b8; + border-color: transparent; + color: #fff; } + .file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { + background-color: #2b5eae; + border-color: transparent; + color: #fff; } + .file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(46, 99, 184, 0.25); + color: #fff; } + .file.is-link:active .file-cta, .file.is-link.is-active .file-cta { + background-color: #2958a4; + border-color: transparent; + color: #fff; } + .file.is-info .file-cta { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { + background-color: #1496ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #118fe4; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffdb4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83d; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 0.75rem; } + .file.is-medium { + font-size: 1.25rem; } + .file.is-medium .file-icon .fa { + font-size: 21px; } + .file.is-large { + font-size: 1.5rem; } + .file.is-large .file-icon .fa { + font-size: 28px; } + .file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .file.has-name.is-empty .file-cta { + border-radius: 4px; } + .file.has-name.is-empty .file-name { + display: none; } + .file.is-boxed .file-label { + flex-direction: column; } + .file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; } + .file.is-boxed .file-name { + border-width: 0 1px 1px; } + .file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; } + .file.is-boxed .file-icon .fa { + font-size: 21px; } + .file.is-boxed.is-small .file-icon .fa, #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { + font-size: 14px; } + .file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; } + .file.is-boxed.is-large .file-icon .fa { + font-size: 35px; } + .file.is-boxed.has-name .file-cta { + border-radius: 4px 4px 0 0; } + .file.is-boxed.has-name .file-name { + border-radius: 0 0 4px 4px; + border-width: 0 1px 1px; } + .file.is-centered { + justify-content: center; } + .file.is-fullwidth .file-label { + width: 100%; } + .file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; } + .file.is-right { + justify-content: flex-end; } + .file.is-right .file-cta { + border-radius: 0 4px 4px 0; } + .file.is-right .file-name { + border-radius: 4px 0 0 4px; + border-width: 1px 0 1px 1px; + order: -1; } + +.file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; } + .file-label:hover .file-cta { + background-color: #eeeeee; + color: #363636; } + .file-label:hover .file-name { + border-color: #d5d5d5; } + .file-label:active .file-cta { + background-color: #e8e8e8; + color: #363636; } + .file-label:active .file-name { + border-color: #cfcfcf; } + +.file-input { + height: 100%; + left: 0; + opacity: 0; + outline: none; + position: absolute; + top: 0; + width: 100%; } + +.file-cta, +.file-name { + border-color: #dbdbdb; + border-radius: 4px; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; } + +.file-cta { + background-color: whitesmoke; + color: #4a4a4a; } + +.file-name { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; } + +.file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; } + .file-icon .fa { + font-size: 14px; } + +.label { + color: #363636; + display: block; + font-size: 1rem; + font-weight: 700; } + .label:not(:last-child) { + margin-bottom: 0.5em; } + .label.is-small, #documenter .docs-sidebar form.docs-search > input.label { + font-size: 0.75rem; } + .label.is-medium { + font-size: 1.25rem; } + .label.is-large { + font-size: 1.5rem; } + +.help { + display: block; + font-size: 0.75rem; + margin-top: 0.25rem; } + .help.is-white { + color: white; } + .help.is-black { + color: #0a0a0a; } + .help.is-light { + color: whitesmoke; } + .help.is-dark, .content kbd.help { + color: #363636; } + .help.is-primary, .docstring > section > a.help.docs-sourcelink { + color: #4eb5de; } + .help.is-link { + color: #2e63b8; } + .help.is-info { + color: #209cee; } + .help.is-success { + color: #22c35b; } + .help.is-warning { + color: #ffdd57; } + .help.is-danger { + color: #da0b00; } + +.field:not(:last-child) { + margin-bottom: 0.75rem; } + +.field.has-addons { + display: flex; + justify-content: flex-start; } + .field.has-addons .control:not(:last-child) { + margin-right: -1px; } + .field.has-addons .control:not(:first-child):not(:last-child) .button, + .field.has-addons .control:not(:first-child):not(:last-child) .input, + .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, + .field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; } + .field.has-addons .control:first-child:not(:only-child) .button, + .field.has-addons .control:first-child:not(:only-child) .input, + .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, + .field.has-addons .control:first-child:not(:only-child) .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .field.has-addons .control:last-child:not(:only-child) .button, + .field.has-addons .control:last-child:not(:only-child) .input, + .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, + .field.has-addons .control:last-child:not(:only-child) .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]).is-hovered, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]).is-hovered { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input:not([disabled]).is-focused, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input:not([disabled]).is-active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select:not([disabled]).is-focused, + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select:not([disabled]).is-active { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input:not([disabled]).is-focused:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input:not([disabled]).is-active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select:not([disabled]).is-focused:hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select:not([disabled]).is-active:hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.is-grouped.is-grouped-centered { + justify-content: center; } + .field.is-grouped.is-grouped-right { + justify-content: flex-end; } + .field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; } + .field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; } + .field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; } + .field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field.is-horizontal { + display: flex; } } + +.field-label .label { + font-size: inherit; } + +@media screen and (max-width: 768px) { + .field-label { + margin-bottom: 0.5rem; } } + +@media screen and (min-width: 769px), print { + .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; } + .field-label.is-small, #documenter .docs-sidebar form.docs-search > input.field-label { + font-size: 0.75rem; + padding-top: 0.375em; } + .field-label.is-normal { + padding-top: 0.375em; } + .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; } + .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; } } + +.field-body .field .field { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; } + .field-body .field { + margin-bottom: 0; } + .field-body > .field { + flex-shrink: 1; } + .field-body > .field:not(.is-narrow) { + flex-grow: 1; } + .field-body > .field:not(:last-child) { + margin-right: 0.75rem; } } + +.control { + box-sizing: border-box; + clear: both; + font-size: 1rem; + position: relative; + text-align: left; } + .control.has-icons-left .input:focus ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, + .control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, + .control.has-icons-right .select:focus ~ .icon { + color: #7a7a7a; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, + .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon, + .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { + font-size: 0.75rem; } + .control.has-icons-left .input.is-medium ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, + .control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, + .control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; } + .control.has-icons-left .input.is-large ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, + .control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, + .control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; } + .control.has-icons-left .icon, .control.has-icons-right .icon { + color: #dbdbdb; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + .control.has-icons-left .input, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, + .control.has-icons-left .select select { + padding-left: 2.25em; } + .control.has-icons-left .icon.is-left { + left: 0; } + .control.has-icons-right .input, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, + .control.has-icons-right .select select { + padding-right: 2.25em; } + .control.has-icons-right .icon.is-right { + right: 0; } + .control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; } + .control.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { + font-size: 0.75rem; } + .control.is-loading.is-medium:after { + font-size: 1.25rem; } + .control.is-loading.is-large:after { + font-size: 1.5rem; } + +.breadcrumb { + font-size: 1rem; + white-space: nowrap; } + .breadcrumb a { + align-items: center; + color: #2e63b8; + display: flex; + justify-content: center; + padding: 0 0.75em; } + .breadcrumb a:hover { + color: #363636; } + .breadcrumb li { + align-items: center; + display: flex; } + .breadcrumb li:first-child a { + padding-left: 0; } + .breadcrumb li.is-active a { + color: #222222; + cursor: default; + pointer-events: none; } + .breadcrumb li + li::before { + color: #b5b5b5; + content: "\0002f"; } + .breadcrumb ul, + .breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .breadcrumb .icon:first-child { + margin-right: 0.5em; } + .breadcrumb .icon:last-child { + margin-left: 0.5em; } + .breadcrumb.is-centered ol, + .breadcrumb.is-centered ul { + justify-content: center; } + .breadcrumb.is-right ol, + .breadcrumb.is-right ul { + justify-content: flex-end; } + .breadcrumb.is-small, #documenter .docs-sidebar form.docs-search > input.breadcrumb { + font-size: 0.75rem; } + .breadcrumb.is-medium { + font-size: 1.25rem; } + .breadcrumb.is-large { + font-size: 1.5rem; } + .breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; } + .breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; } + .breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; } + .breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; } + +.card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #222222; + max-width: 100%; + position: relative; } + +.card-header { + background-color: transparent; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; } + +.card-header-title { + align-items: center; + color: #222222; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; } + .card-header-title.is-centered { + justify-content: center; } + +.card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; } + +.card-image { + display: block; + position: relative; } + +.card-content { + background-color: transparent; + padding: 1rem 1.25rem; } + +.card-footer { + background-color: transparent; + border-top: 1px solid #dbdbdb; + align-items: stretch; + display: flex; } + +.card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; } + .card-footer-item:not(:last-child) { + border-right: 1px solid #dbdbdb; } + +.card .media:not(:last-child) { + margin-bottom: 1.5rem; } + +.dropdown { + display: inline-flex; + position: relative; + vertical-align: top; } + .dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { + display: block; } + .dropdown.is-right .dropdown-menu { + left: auto; + right: 0; } + .dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; } + +.dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; } + +.dropdown-content { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + +.dropdown-item { + color: #4a4a4a; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; } + +a.dropdown-item, +button.dropdown-item { + padding-right: 3rem; + text-align: left; + white-space: nowrap; + width: 100%; } + a.dropdown-item:hover, + button.dropdown-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + a.dropdown-item.is-active, + button.dropdown-item.is-active { + background-color: #2e63b8; + color: #fff; } + +.dropdown-divider { + background-color: #dbdbdb; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; } + +.level { + align-items: center; + justify-content: space-between; } + .level code { + border-radius: 4px; } + .level img { + display: inline-block; + vertical-align: top; } + .level.is-mobile { + display: flex; } + .level.is-mobile .level-left, + .level.is-mobile .level-right { + display: flex; } + .level.is-mobile .level-left + .level-right { + margin-top: 0; } + .level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level { + display: flex; } + .level > .level-item:not(.is-narrow) { + flex-grow: 1; } } + +.level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; } + .level-item .title, + .level-item .subtitle { + margin-bottom: 0; } + @media screen and (max-width: 768px) { + .level-item:not(:last-child) { + margin-bottom: 0.75rem; } } + +.level-left, +.level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + .level-left .level-item.is-flexible, + .level-right .level-item.is-flexible { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level-left .level-item:not(:last-child), + .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; } } + +.level-left { + align-items: center; + justify-content: flex-start; } + @media screen and (max-width: 768px) { + .level-left + .level-right { + margin-top: 1.5rem; } } + @media screen and (min-width: 769px), print { + .level-left { + display: flex; } } + +.level-right { + align-items: center; + justify-content: flex-end; } + @media screen and (min-width: 769px), print { + .level-right { + display: flex; } } + +.list { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } + +.list-item { + display: block; + padding: 0.5em 1em; } + .list-item:not(a) { + color: #222222; } + .list-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; } + .list-item:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; } + .list-item:not(:last-child) { + border-bottom: 1px solid #dbdbdb; } + .list-item.is-active { + background-color: #2e63b8; + color: #fff; } + +a.list-item { + background-color: whitesmoke; + cursor: pointer; } + +.media { + align-items: flex-start; + display: flex; + text-align: left; } + .media .content:not(:last-child) { + margin-bottom: 0.75rem; } + .media .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + display: flex; + padding-top: 0.75rem; } + .media .media .content:not(:last-child), + .media .media .control:not(:last-child) { + margin-bottom: 0.5rem; } + .media .media .media { + padding-top: 0.5rem; } + .media .media .media + .media { + margin-top: 0.5rem; } + .media + .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + margin-top: 1rem; + padding-top: 1rem; } + .media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; } + +.media-left, +.media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + +.media-left { + margin-right: 1rem; } + +.media-right { + margin-left: 1rem; } + +.media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; } + +@media screen and (max-width: 768px) { + .media-content { + overflow-x: auto; } } + +.menu { + font-size: 1rem; } + .menu.is-small, #documenter .docs-sidebar form.docs-search > input.menu { + font-size: 0.75rem; } + .menu.is-medium { + font-size: 1.25rem; } + .menu.is-large { + font-size: 1.5rem; } + +.menu-list { + line-height: 1.25; } + .menu-list a { + border-radius: 2px; + color: #222222; + display: block; + padding: 0.5em 0.75em; } + .menu-list a:hover { + background-color: whitesmoke; + color: #222222; } + .menu-list a.is-active { + background-color: #2e63b8; + color: #fff; } + .menu-list li ul { + border-left: 1px solid #dbdbdb; + margin: 0.75em; + padding-left: 0.75em; } + +.menu-label { + color: #7a7a7a; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; } + .menu-label:not(:first-child) { + margin-top: 1em; } + .menu-label:not(:last-child) { + margin-bottom: 1em; } + +.message { + background-color: whitesmoke; + border-radius: 4px; + font-size: 1rem; } + .message strong { + color: currentColor; } + .message a:not(.button):not(.tag):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .message.is-small, #documenter .docs-sidebar form.docs-search > input.message { + font-size: 0.75rem; } + .message.is-medium { + font-size: 1.25rem; } + .message.is-large { + font-size: 1.5rem; } + .message.is-white { + background-color: white; } + .message.is-white .message-header { + background-color: white; + color: #0a0a0a; } + .message.is-white .message-body { + border-color: white; + color: #4d4d4d; } + .message.is-black { + background-color: #fafafa; } + .message.is-black .message-header { + background-color: #0a0a0a; + color: white; } + .message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; } + .message.is-light { + background-color: #fafafa; } + .message.is-light .message-header { + background-color: whitesmoke; + color: #363636; } + .message.is-light .message-body { + border-color: whitesmoke; + color: #505050; } + .message.is-dark, .content kbd.message { + background-color: #fafafa; } + .message.is-dark .message-header, .content kbd.message .message-header { + background-color: #363636; + color: whitesmoke; } + .message.is-dark .message-body, .content kbd.message .message-body { + border-color: #363636; + color: #2a2a2a; } + .message.is-primary, .docstring > section > a.message.docs-sourcelink { + background-color: #f6fbfd; } + .message.is-primary .message-header, .docstring > section > a.message.docs-sourcelink .message-header { + background-color: #4eb5de; + color: #fff; } + .message.is-primary .message-body, .docstring > section > a.message.docs-sourcelink .message-body { + border-color: #4eb5de; + color: #1f556a; } + .message.is-link { + background-color: #f7f9fd; } + .message.is-link .message-header { + background-color: #2e63b8; + color: #fff; } + .message.is-link .message-body { + border-color: #2e63b8; + color: #264981; } + .message.is-info { + background-color: #f6fbfe; } + .message.is-info .message-header { + background-color: #209cee; + color: #fff; } + .message.is-info .message-body { + border-color: #209cee; + color: #12537e; } + .message.is-success { + background-color: #f6fdf9; } + .message.is-success .message-header { + background-color: #22c35b; + color: #fff; } + .message.is-success .message-body { + border-color: #22c35b; + color: #0f361d; } + .message.is-warning { + background-color: #fffdf5; } + .message.is-warning .message-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .message.is-warning .message-body { + border-color: #ffdd57; + color: #3b3108; } + .message.is-danger { + background-color: #fff5f5; } + .message.is-danger .message-header { + background-color: #da0b00; + color: #fff; } + .message.is-danger .message-body { + border-color: #da0b00; + color: #9b0c04; } + +.message-header { + align-items: center; + background-color: #222222; + border-radius: 4px 4px 0 0; + color: #fff; + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + .message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; } + .message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.message-body { + border-color: #dbdbdb; + border-radius: 4px; + border-style: solid; + border-width: 0 0 0 4px; + color: #222222; + padding: 1em 1.25em; } + .message-body code, + .message-body pre { + background-color: white; } + .message-body pre code { + background-color: transparent; } + +.modal { + align-items: center; + display: none; + flex-direction: column; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; } + .modal.is-active { + display: flex; } + +.modal-background { + background-color: rgba(10, 10, 10, 0.86); } + +.modal-content, +.modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; } + @media screen and (min-width: 769px), print { + .modal-content, + .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; } } + +.modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; } + +.modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; + -ms-overflow-y: visible; } + +.modal-card-head, +.modal-card-foot { + align-items: center; + background-color: whitesmoke; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; } + +.modal-card-head { + border-bottom: 1px solid #dbdbdb; + border-top-left-radius: 6px; + border-top-right-radius: 6px; } + +.modal-card-title { + color: #222222; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; } + +.modal-card-foot { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 1px solid #dbdbdb; } + .modal-card-foot .button:not(:last-child) { + margin-right: 0.5em; } + +.modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; } + +.navbar { + background-color: white; + min-height: 3.25rem; + position: relative; + z-index: 30; } + .navbar.is-white { + background-color: white; + color: #0a0a0a; } + .navbar.is-white .navbar-brand > .navbar-item, + .navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, + .navbar.is-white .navbar-brand .navbar-link:focus, + .navbar.is-white .navbar-brand .navbar-link:hover, + .navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-burger { + color: #0a0a0a; } + @media screen and (min-width: 1056px) { + .navbar.is-white .navbar-start > .navbar-item, + .navbar.is-white .navbar-start .navbar-link, + .navbar.is-white .navbar-end > .navbar-item, + .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, + .navbar.is-white .navbar-start .navbar-link:focus, + .navbar.is-white .navbar-start .navbar-link:hover, + .navbar.is-white .navbar-start .navbar-link.is-active, + .navbar.is-white .navbar-end > a.navbar-item:focus, + .navbar.is-white .navbar-end > a.navbar-item:hover, + .navbar.is-white .navbar-end > a.navbar-item.is-active, + .navbar.is-white .navbar-end .navbar-link:focus, + .navbar.is-white .navbar-end .navbar-link:hover, + .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-start .navbar-link::after, + .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; } } + .navbar.is-black { + background-color: #0a0a0a; + color: white; } + .navbar.is-black .navbar-brand > .navbar-item, + .navbar.is-black .navbar-brand .navbar-link { + color: white; } + .navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, + .navbar.is-black .navbar-brand .navbar-link:focus, + .navbar.is-black .navbar-brand .navbar-link:hover, + .navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-burger { + color: white; } + @media screen and (min-width: 1056px) { + .navbar.is-black .navbar-start > .navbar-item, + .navbar.is-black .navbar-start .navbar-link, + .navbar.is-black .navbar-end > .navbar-item, + .navbar.is-black .navbar-end .navbar-link { + color: white; } + .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, + .navbar.is-black .navbar-start .navbar-link:focus, + .navbar.is-black .navbar-start .navbar-link:hover, + .navbar.is-black .navbar-start .navbar-link.is-active, + .navbar.is-black .navbar-end > a.navbar-item:focus, + .navbar.is-black .navbar-end > a.navbar-item:hover, + .navbar.is-black .navbar-end > a.navbar-item.is-active, + .navbar.is-black .navbar-end .navbar-link:focus, + .navbar.is-black .navbar-end .navbar-link:hover, + .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-start .navbar-link::after, + .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; } + .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; } } + .navbar.is-light { + background-color: whitesmoke; + color: #363636; } + .navbar.is-light .navbar-brand > .navbar-item, + .navbar.is-light .navbar-brand .navbar-link { + color: #363636; } + .navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, + .navbar.is-light .navbar-brand .navbar-link:focus, + .navbar.is-light .navbar-brand .navbar-link:hover, + .navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-brand .navbar-link::after { + border-color: #363636; } + .navbar.is-light .navbar-burger { + color: #363636; } + @media screen and (min-width: 1056px) { + .navbar.is-light .navbar-start > .navbar-item, + .navbar.is-light .navbar-start .navbar-link, + .navbar.is-light .navbar-end > .navbar-item, + .navbar.is-light .navbar-end .navbar-link { + color: #363636; } + .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, + .navbar.is-light .navbar-start .navbar-link:focus, + .navbar.is-light .navbar-start .navbar-link:hover, + .navbar.is-light .navbar-start .navbar-link.is-active, + .navbar.is-light .navbar-end > a.navbar-item:focus, + .navbar.is-light .navbar-end > a.navbar-item:hover, + .navbar.is-light .navbar-end > a.navbar-item.is-active, + .navbar.is-light .navbar-end .navbar-link:focus, + .navbar.is-light .navbar-end .navbar-link:hover, + .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-start .navbar-link::after, + .navbar.is-light .navbar-end .navbar-link::after { + border-color: #363636; } + .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #363636; } } + .navbar.is-dark, .content kbd.navbar { + background-color: #363636; + color: whitesmoke; } + .navbar.is-dark .navbar-brand > .navbar-item, .content kbd.navbar .navbar-brand > .navbar-item, + .navbar.is-dark .navbar-brand .navbar-link, + .content kbd.navbar .navbar-brand .navbar-link { + color: whitesmoke; } + .navbar.is-dark .navbar-brand > a.navbar-item:focus, .content kbd.navbar .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .content kbd.navbar .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, .content kbd.navbar .navbar-brand > a.navbar-item.is-active, + .navbar.is-dark .navbar-brand .navbar-link:focus, + .content kbd.navbar .navbar-brand .navbar-link:focus, + .navbar.is-dark .navbar-brand .navbar-link:hover, + .content kbd.navbar .navbar-brand .navbar-link:hover, + .navbar.is-dark .navbar-brand .navbar-link.is-active, + .content kbd.navbar .navbar-brand .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-brand .navbar-link::after, .content kbd.navbar .navbar-brand .navbar-link::after { + border-color: whitesmoke; } + .navbar.is-dark .navbar-burger, .content kbd.navbar .navbar-burger { + color: whitesmoke; } + @media screen and (min-width: 1056px) { + .navbar.is-dark .navbar-start > .navbar-item, .content kbd.navbar .navbar-start > .navbar-item, + .navbar.is-dark .navbar-start .navbar-link, + .content kbd.navbar .navbar-start .navbar-link, + .navbar.is-dark .navbar-end > .navbar-item, + .content kbd.navbar .navbar-end > .navbar-item, + .navbar.is-dark .navbar-end .navbar-link, + .content kbd.navbar .navbar-end .navbar-link { + color: whitesmoke; } + .navbar.is-dark .navbar-start > a.navbar-item:focus, .content kbd.navbar .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .content kbd.navbar .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, .content kbd.navbar .navbar-start > a.navbar-item.is-active, + .navbar.is-dark .navbar-start .navbar-link:focus, + .content kbd.navbar .navbar-start .navbar-link:focus, + .navbar.is-dark .navbar-start .navbar-link:hover, + .content kbd.navbar .navbar-start .navbar-link:hover, + .navbar.is-dark .navbar-start .navbar-link.is-active, + .content kbd.navbar .navbar-start .navbar-link.is-active, + .navbar.is-dark .navbar-end > a.navbar-item:focus, + .content kbd.navbar .navbar-end > a.navbar-item:focus, + .navbar.is-dark .navbar-end > a.navbar-item:hover, + .content kbd.navbar .navbar-end > a.navbar-item:hover, + .navbar.is-dark .navbar-end > a.navbar-item.is-active, + .content kbd.navbar .navbar-end > a.navbar-item.is-active, + .navbar.is-dark .navbar-end .navbar-link:focus, + .content kbd.navbar .navbar-end .navbar-link:focus, + .navbar.is-dark .navbar-end .navbar-link:hover, + .content kbd.navbar .navbar-end .navbar-link:hover, + .navbar.is-dark .navbar-end .navbar-link.is-active, + .content kbd.navbar .navbar-end .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-start .navbar-link::after, .content kbd.navbar .navbar-start .navbar-link::after, + .navbar.is-dark .navbar-end .navbar-link::after, + .content kbd.navbar .navbar-end .navbar-link::after { + border-color: whitesmoke; } + .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, + .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { + background-color: #363636; + color: whitesmoke; } } + .navbar.is-primary, .docstring > section > a.navbar.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .navbar.is-primary .navbar-brand > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, + .navbar.is-primary .navbar-brand .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-brand > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, + .navbar.is-primary .navbar-brand .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, + .navbar.is-primary .navbar-brand .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, + .navbar.is-primary .navbar-brand .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-brand .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-burger, .docstring > section > a.navbar.docs-sourcelink .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-primary .navbar-start > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, + .navbar.is-primary .navbar-start .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, + .navbar.is-primary .navbar-end > .navbar-item, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, + .navbar.is-primary .navbar-end .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-start > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, + .navbar.is-primary .navbar-start .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, + .navbar.is-primary .navbar-start .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, + .navbar.is-primary .navbar-start .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, + .navbar.is-primary .navbar-end > a.navbar-item:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, + .navbar.is-primary .navbar-end > a.navbar-item:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, + .navbar.is-primary .navbar-end > a.navbar-item.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, + .navbar.is-primary .navbar-end .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, + .navbar.is-primary .navbar-end .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, + .navbar.is-primary .navbar-end .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-start .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, + .navbar.is-primary .navbar-end .navbar-link::after, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #4eb5de; + color: #fff; } } + .navbar.is-link { + background-color: #2e63b8; + color: #fff; } + .navbar.is-link .navbar-brand > .navbar-item, + .navbar.is-link .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, + .navbar.is-link .navbar-brand .navbar-link:focus, + .navbar.is-link .navbar-brand .navbar-link:hover, + .navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-link .navbar-start > .navbar-item, + .navbar.is-link .navbar-start .navbar-link, + .navbar.is-link .navbar-end > .navbar-item, + .navbar.is-link .navbar-end .navbar-link { + color: #fff; } + .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, + .navbar.is-link .navbar-start .navbar-link:focus, + .navbar.is-link .navbar-start .navbar-link:hover, + .navbar.is-link .navbar-start .navbar-link.is-active, + .navbar.is-link .navbar-end > a.navbar-item:focus, + .navbar.is-link .navbar-end > a.navbar-item:hover, + .navbar.is-link .navbar-end > a.navbar-item.is-active, + .navbar.is-link .navbar-end .navbar-link:focus, + .navbar.is-link .navbar-end .navbar-link:hover, + .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-start .navbar-link::after, + .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #2e63b8; + color: #fff; } } + .navbar.is-info { + background-color: #209cee; + color: #fff; } + .navbar.is-info .navbar-brand > .navbar-item, + .navbar.is-info .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, + .navbar.is-info .navbar-brand .navbar-link:focus, + .navbar.is-info .navbar-brand .navbar-link:hover, + .navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 whitesmoke; } + .navbar.is-fixed-bottom, .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom { + bottom: 0; } + .navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 whitesmoke; } + .navbar.is-fixed-top { + top: 0; } + +html.has-navbar-fixed-top, +body.has-navbar-fixed-top { + padding-top: 3.25rem; } + +html.has-navbar-fixed-bottom, +body.has-navbar-fixed-bottom { + padding-bottom: 3.25rem; } + +.navbar-brand, +.navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 3.25rem; } + +.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { + background-color: transparent; } + +.navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; } + +.navbar-burger { + color: #4a4a4a; + cursor: pointer; + display: block; + height: 3.25rem; + position: relative; + width: 3.25rem; + margin-left: auto; } + .navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, transform; + transition-timing-function: ease-out; + width: 16px; } + .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); } + .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); } + .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); } + .navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); } + .navbar-burger.is-active span:nth-child(1) { + transform: translateY(5px) rotate(45deg); } + .navbar-burger.is-active span:nth-child(2) { + opacity: 0; } + .navbar-burger.is-active span:nth-child(3) { + transform: translateY(-5px) rotate(-45deg); } + +.navbar-menu { + display: none; } + +.navbar-item, +.navbar-link { + color: #4a4a4a; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; } + .navbar-item .icon:only-child, + .navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; } + +a.navbar-item, +.navbar-link { + cursor: pointer; } + a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, + .navbar-link:focus, + .navbar-link:focus-within, + .navbar-link:hover, + .navbar-link.is-active { + background-color: #fafafa; + color: #2e63b8; } + +.navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; } + .navbar-item img { + max-height: 1.75rem; } + .navbar-item.has-dropdown { + padding: 0; } + .navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 3.25rem; + padding-bottom: calc(0.5rem - 1px); } + .navbar-item.is-tab:focus, .navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #2e63b8; } + .navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #2e63b8; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #2e63b8; + padding-bottom: calc(0.5rem - 3px); } + +.navbar-content { + flex-grow: 1; + flex-shrink: 1; } + +.navbar-link:not(.is-arrowless) { + padding-right: 2.5em; } + .navbar-link:not(.is-arrowless)::after { + border-color: #2e63b8; + margin-top: -0.375em; + right: 1.125em; } + +.navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + .navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; } + +.navbar-divider { + background-color: whitesmoke; + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; } + +@media screen and (max-width: 1055px) { + .navbar > .container { + display: block; } + .navbar-brand .navbar-item, + .navbar-tabs .navbar-item { + align-items: center; + display: flex; } + .navbar-link::after { + display: none; } + .navbar-menu { + background-color: white; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; } + .navbar-menu.is-active { + display: block; } + .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-touch { + bottom: 0; } + .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-touch { + top: 0; } + .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 3.25rem); + overflow: auto; } + html.has-navbar-fixed-top-touch, + body.has-navbar-fixed-top-touch { + padding-top: 3.25rem; } + html.has-navbar-fixed-bottom-touch, + body.has-navbar-fixed-bottom-touch { + padding-bottom: 3.25rem; } } + +@media screen and (min-width: 1056px) { + .navbar, + .navbar-menu, + .navbar-start, + .navbar-end { + align-items: stretch; + display: flex; } + .navbar { + min-height: 3.25rem; } + .navbar.is-spaced { + padding: 1rem 2rem; } + .navbar.is-spaced .navbar-start, + .navbar.is-spaced .navbar-end { + align-items: center; } + .navbar.is-spaced a.navbar-item, + .navbar.is-spaced .navbar-link { + border-radius: 4px; } + .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, + .navbar.is-transparent .navbar-link:focus, + .navbar.is-transparent .navbar-link:hover, + .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; } + .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; } + .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #2e63b8; } + .navbar-burger { + display: none; } + .navbar-item, + .navbar-link { + align-items: center; + display: flex; } + .navbar-item { + display: flex; } + .navbar-item.has-dropdown { + align-items: stretch; } + .navbar-item.has-dropdown-up .navbar-link::after { + transform: rotate(135deg) translate(0.25em, -0.25em); } + .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 2px solid #dbdbdb; + border-radius: 6px 6px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; } + .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; } + .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + transform: translateY(0); } + .navbar-menu { + flex-grow: 1; + flex-shrink: 0; } + .navbar-start { + justify-content: flex-start; + margin-right: auto; } + .navbar-end { + justify-content: flex-end; + margin-left: auto; } + .navbar-dropdown { + background-color: white; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 2px solid #dbdbdb; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; } + .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; } + .navbar-dropdown a.navbar-item { + padding-right: 3rem; } + .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #2e63b8; } + .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { + border-radius: 6px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, transform; } + .navbar-dropdown.is-right { + left: auto; + right: 0; } + .navbar-divider { + display: block; } + .navbar > .container .navbar-brand, + .container > .navbar .navbar-brand { + margin-left: -.75rem; } + .navbar > .container .navbar-menu, + .container > .navbar .navbar-menu { + margin-right: -.75rem; } + .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-desktop { + bottom: 0; } + .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-desktop { + top: 0; } + html.has-navbar-fixed-top-desktop, + body.has-navbar-fixed-top-desktop { + padding-top: 3.25rem; } + html.has-navbar-fixed-bottom-desktop, + body.has-navbar-fixed-bottom-desktop { + padding-bottom: 3.25rem; } + html.has-spaced-navbar-fixed-top, + body.has-spaced-navbar-fixed-top { + padding-top: 5.25rem; } + html.has-spaced-navbar-fixed-bottom, + body.has-spaced-navbar-fixed-bottom { + padding-bottom: 5.25rem; } + a.navbar-item.is-active, + .navbar-link.is-active { + color: #0a0a0a; } + a.navbar-item.is-active:not(:focus):not(:hover), + .navbar-link.is-active:not(:focus):not(:hover) { + background-color: transparent; } + .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #fafafa; } } + +.hero.is-fullheight-with-navbar { + min-height: calc(100vh - 3.25rem); } + +.pagination { + font-size: 1rem; + margin: -0.25rem; } + .pagination.is-small, #documenter .docs-sidebar form.docs-search > input.pagination { + font-size: 0.75rem; } + .pagination.is-medium { + font-size: 1.25rem; } + .pagination.is-large { + font-size: 1.5rem; } + .pagination.is-rounded .pagination-previous, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, + .pagination.is-rounded .pagination-next, + #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; } + .pagination.is-rounded .pagination-link, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { + border-radius: 290486px; } + +.pagination, +.pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + font-size: 1em; + justify-content: center; + margin: 0.25rem; + padding-left: 0.5em; + padding-right: 0.5em; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link { + border-color: #dbdbdb; + color: #363636; + min-width: 2.25em; } + .pagination-previous:hover, + .pagination-next:hover, + .pagination-link:hover { + border-color: #b5b5b5; + color: #363636; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus { + border-color: #2e63b8; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #7a7a7a; + opacity: 0.5; } + +.pagination-previous, +.pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + +.pagination-link.is-current { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + +.pagination-ellipsis { + color: #b5b5b5; + pointer-events: none; } + +.pagination-list { + flex-wrap: wrap; } + +@media screen and (max-width: 768px) { + .pagination { + flex-wrap: wrap; } + .pagination-previous, + .pagination-next { + flex-grow: 1; + flex-shrink: 1; } + .pagination-list li { + flex-grow: 1; + flex-shrink: 1; } } + +@media screen and (min-width: 769px), print { + .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; } + .pagination-previous { + order: 2; } + .pagination-next { + order: 3; } + .pagination { + justify-content: space-between; } + .pagination.is-centered .pagination-previous { + order: 1; } + .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; } + .pagination.is-centered .pagination-next { + order: 3; } + .pagination.is-right .pagination-previous { + order: 1; } + .pagination.is-right .pagination-next { + order: 2; } + .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; } } + +.panel { + font-size: 1rem; } + .panel:not(:last-child) { + margin-bottom: 1.5rem; } + +.panel-heading, +.panel-tabs, +.panel-block { + border-bottom: 1px solid #dbdbdb; + border-left: 1px solid #dbdbdb; + border-right: 1px solid #dbdbdb; } + .panel-heading:first-child, + .panel-tabs:first-child, + .panel-block:first-child { + border-top: 1px solid #dbdbdb; } + +.panel-heading { + background-color: whitesmoke; + border-radius: 4px 4px 0 0; + color: #222222; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; } + +.panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; } + .panel-tabs a { + border-bottom: 1px solid #dbdbdb; + margin-bottom: -1px; + padding: 0.5em; } + .panel-tabs a.is-active { + border-bottom-color: #4a4a4a; + color: #363636; } + +.panel-list a { + color: #222222; } + .panel-list a:hover { + color: #2e63b8; } + +.panel-block { + align-items: center; + color: #222222; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; } + .panel-block input[type="checkbox"] { + margin-right: 0.75em; } + .panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; } + .panel-block.is-wrapped { + flex-wrap: wrap; } + .panel-block.is-active { + border-left-color: #2e63b8; + color: #363636; } + .panel-block.is-active .panel-icon { + color: #2e63b8; } + +a.panel-block, +label.panel-block { + cursor: pointer; } + a.panel-block:hover, + label.panel-block:hover { + background-color: whitesmoke; } + +.panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: #7a7a7a; + margin-right: 0.75em; } + .panel-icon .fa { + font-size: inherit; + line-height: inherit; } + +.tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 1rem; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; } + .tabs a { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #222222; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; } + .tabs a:hover { + border-bottom-color: #222222; + color: #222222; } + .tabs li { + display: block; } + .tabs li.is-active a { + border-bottom-color: #2e63b8; + color: #2e63b8; } + .tabs ul { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; } + .tabs ul.is-left { + padding-right: 0.75em; } + .tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; } + .tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; } + .tabs .icon:first-child { + margin-right: 0.5em; } + .tabs .icon:last-child { + margin-left: 0.5em; } + .tabs.is-centered ul { + justify-content: center; } + .tabs.is-right ul { + justify-content: flex-end; } + .tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 4px 4px 0 0; } + .tabs.is-boxed a:hover { + background-color: whitesmoke; + border-bottom-color: #dbdbdb; } + .tabs.is-boxed li.is-active a { + background-color: white; + border-color: #dbdbdb; + border-bottom-color: transparent !important; } + .tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; } + .tabs.is-toggle a { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; } + .tabs.is-toggle a:hover { + background-color: whitesmoke; + border-color: #b5b5b5; + z-index: 2; } + .tabs.is-toggle li + li { + margin-left: -1px; } + .tabs.is-toggle li:first-child a { + border-radius: 4px 0 0 4px; } + .tabs.is-toggle li:last-child a { + border-radius: 0 4px 4px 0; } + .tabs.is-toggle li.is-active a { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; + z-index: 1; } + .tabs.is-toggle ul { + border-bottom: none; } + .tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; } + .tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; } + .tabs.is-small, #documenter .docs-sidebar form.docs-search > input.tabs { + font-size: 0.75rem; } + .tabs.is-medium { + font-size: 1.25rem; } + .tabs.is-large { + font-size: 1.5rem; } + +.column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; } + .columns.is-mobile > .column.is-narrow { + flex: none; } + .columns.is-mobile > .column.is-full { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-three-quarters { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-two-thirds { + flex: none; + width: 66.6666%; } + .columns.is-mobile > .column.is-half { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-one-third { + flex: none; + width: 33.3333%; } + .columns.is-mobile > .column.is-one-quarter { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-one-fifth { + flex: none; + width: 20%; } + .columns.is-mobile > .column.is-two-fifths { + flex: none; + width: 40%; } + .columns.is-mobile > .column.is-three-fifths { + flex: none; + width: 60%; } + .columns.is-mobile > .column.is-four-fifths { + flex: none; + width: 80%; } + .columns.is-mobile > .column.is-offset-three-quarters { + margin-left: 75%; } + .columns.is-mobile > .column.is-offset-two-thirds { + margin-left: 66.6666%; } + .columns.is-mobile > .column.is-offset-half { + margin-left: 50%; } + .columns.is-mobile > .column.is-offset-one-third { + margin-left: 33.3333%; } + .columns.is-mobile > .column.is-offset-one-quarter { + margin-left: 25%; } + .columns.is-mobile > .column.is-offset-one-fifth { + margin-left: 20%; } + .columns.is-mobile > .column.is-offset-two-fifths { + margin-left: 40%; } + .columns.is-mobile > .column.is-offset-three-fifths { + margin-left: 60%; } + .columns.is-mobile > .column.is-offset-four-fifths { + margin-left: 80%; } + .columns.is-mobile > .column.is-0 { + flex: none; + width: 0%; } + .columns.is-mobile > .column.is-offset-0 { + margin-left: 0%; } + .columns.is-mobile > .column.is-1 { + flex: none; + width: 8.33333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.33333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.66667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.66667%; } + .columns.is-mobile > .column.is-3 { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-offset-3 { + margin-left: 25%; } + .columns.is-mobile > .column.is-4 { + flex: none; + width: 33.33333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.33333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.66667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.66667%; } + .columns.is-mobile > .column.is-6 { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-offset-6 { + margin-left: 50%; } + .columns.is-mobile > .column.is-7 { + flex: none; + width: 58.33333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.33333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.66667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.66667%; } + .columns.is-mobile > .column.is-9 { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-offset-9 { + margin-left: 75%; } + .columns.is-mobile > .column.is-10 { + flex: none; + width: 83.33333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.33333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.66667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.66667%; } + .columns.is-mobile > .column.is-12 { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-offset-12 { + margin-left: 100%; } + @media screen and (max-width: 768px) { + .column.is-narrow-mobile { + flex: none; } + .column.is-full-mobile { + flex: none; + width: 100%; } + .column.is-three-quarters-mobile { + flex: none; + width: 75%; } + .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; } + .column.is-half-mobile { + flex: none; + width: 50%; } + .column.is-one-third-mobile { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-mobile { + flex: none; + width: 25%; } + .column.is-one-fifth-mobile { + flex: none; + width: 20%; } + .column.is-two-fifths-mobile { + flex: none; + width: 40%; } + .column.is-three-fifths-mobile { + flex: none; + width: 60%; } + .column.is-four-fifths-mobile { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-mobile { + margin-left: 75%; } + .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; } + .column.is-offset-half-mobile { + margin-left: 50%; } + .column.is-offset-one-third-mobile { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-mobile { + margin-left: 25%; } + .column.is-offset-one-fifth-mobile { + margin-left: 20%; } + .column.is-offset-two-fifths-mobile { + margin-left: 40%; } + .column.is-offset-three-fifths-mobile { + margin-left: 60%; } + .column.is-offset-four-fifths-mobile { + margin-left: 80%; } + .column.is-0-mobile { + flex: none; + width: 0%; } + .column.is-offset-0-mobile { + margin-left: 0%; } + .column.is-1-mobile { + flex: none; + width: 8.33333%; } + .column.is-offset-1-mobile { + margin-left: 8.33333%; } + .column.is-2-mobile { + flex: none; + width: 16.66667%; } + .column.is-offset-2-mobile { + margin-left: 16.66667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.33333%; } + .column.is-offset-4-mobile { + margin-left: 33.33333%; } + .column.is-5-mobile { + flex: none; + width: 41.66667%; } + .column.is-offset-5-mobile { + margin-left: 41.66667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.33333%; } + .column.is-offset-7-mobile { + margin-left: 58.33333%; } + .column.is-8-mobile { + flex: none; + width: 66.66667%; } + .column.is-offset-8-mobile { + margin-left: 66.66667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.33333%; } + .column.is-offset-10-mobile { + margin-left: 83.33333%; } + .column.is-11-mobile { + flex: none; + width: 91.66667%; } + .column.is-offset-11-mobile { + margin-left: 91.66667%; } + .column.is-12-mobile { + flex: none; + width: 100%; } + .column.is-offset-12-mobile { + margin-left: 100%; } } + @media screen and (min-width: 769px), print { + .column.is-narrow, .column.is-narrow-tablet { + flex: none; } + .column.is-full, .column.is-full-tablet { + flex: none; + width: 100%; } + .column.is-three-quarters, .column.is-three-quarters-tablet { + flex: none; + width: 75%; } + .column.is-two-thirds, .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; } + .column.is-half, .column.is-half-tablet { + flex: none; + width: 50%; } + .column.is-one-third, .column.is-one-third-tablet { + flex: none; + width: 33.3333%; } + .column.is-one-quarter, .column.is-one-quarter-tablet { + flex: none; + width: 25%; } + .column.is-one-fifth, .column.is-one-fifth-tablet { + flex: none; + width: 20%; } + .column.is-two-fifths, .column.is-two-fifths-tablet { + flex: none; + width: 40%; } + .column.is-three-fifths, .column.is-three-fifths-tablet { + flex: none; + width: 60%; } + .column.is-four-fifths, .column.is-four-fifths-tablet { + flex: none; + width: 80%; } + .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { + margin-left: 75%; } + .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; } + .column.is-offset-half, .column.is-offset-half-tablet { + margin-left: 50%; } + .column.is-offset-one-third, .column.is-offset-one-third-tablet { + margin-left: 33.3333%; } + .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { + margin-left: 25%; } + .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { + margin-left: 20%; } + .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { + margin-left: 40%; } + .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { + margin-left: 60%; } + .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { + margin-left: 80%; } + .column.is-0, .column.is-0-tablet { + flex: none; + width: 0%; } + .column.is-offset-0, .column.is-offset-0-tablet { + margin-left: 0%; } + .column.is-1, .column.is-1-tablet { + flex: none; + width: 8.33333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.33333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.66667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.66667%; } + .column.is-3, .column.is-3-tablet { + flex: none; + width: 25%; } + .column.is-offset-3, .column.is-offset-3-tablet { + margin-left: 25%; } + .column.is-4, .column.is-4-tablet { + flex: none; + width: 33.33333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.33333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.66667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.66667%; } + .column.is-6, .column.is-6-tablet { + flex: none; + width: 50%; } + .column.is-offset-6, .column.is-offset-6-tablet { + margin-left: 50%; } + .column.is-7, .column.is-7-tablet { + flex: none; + width: 58.33333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.33333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.66667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.66667%; } + .column.is-9, .column.is-9-tablet { + flex: none; + width: 75%; } + .column.is-offset-9, .column.is-offset-9-tablet { + margin-left: 75%; } + .column.is-10, .column.is-10-tablet { + flex: none; + width: 83.33333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.33333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.66667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.66667%; } + .column.is-12, .column.is-12-tablet { + flex: none; + width: 100%; } + .column.is-offset-12, .column.is-offset-12-tablet { + margin-left: 100%; } } + @media screen and (max-width: 1055px) { + .column.is-narrow-touch { + flex: none; } + .column.is-full-touch { + flex: none; + width: 100%; } + .column.is-three-quarters-touch { + flex: none; + width: 75%; } + .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; } + .column.is-half-touch { + flex: none; + width: 50%; } + .column.is-one-third-touch { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-touch { + flex: none; + width: 25%; } + .column.is-one-fifth-touch { + flex: none; + width: 20%; } + .column.is-two-fifths-touch { + flex: none; + width: 40%; } + .column.is-three-fifths-touch { + flex: none; + width: 60%; } + .column.is-four-fifths-touch { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-touch { + margin-left: 75%; } + .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; } + .column.is-offset-half-touch { + margin-left: 50%; } + .column.is-offset-one-third-touch { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-touch { + margin-left: 25%; } + .column.is-offset-one-fifth-touch { + margin-left: 20%; } + .column.is-offset-two-fifths-touch { + margin-left: 40%; } + .column.is-offset-three-fifths-touch { + margin-left: 60%; } + .column.is-offset-four-fifths-touch { + margin-left: 80%; } + .column.is-0-touch { + flex: none; + width: 0%; } + .column.is-offset-0-touch { + margin-left: 0%; } + .column.is-1-touch { + flex: none; + width: 8.33333%; } + .column.is-offset-1-touch { + margin-left: 8.33333%; } + .column.is-2-touch { + flex: none; + width: 16.66667%; } + .column.is-offset-2-touch { + margin-left: 16.66667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.33333%; } + .column.is-offset-4-touch { + margin-left: 33.33333%; } + .column.is-5-touch { + flex: none; + width: 41.66667%; } + .column.is-offset-5-touch { + margin-left: 41.66667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.33333%; } + .column.is-offset-7-touch { + margin-left: 58.33333%; } + .column.is-8-touch { + flex: none; + width: 66.66667%; } + .column.is-offset-8-touch { + margin-left: 66.66667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.33333%; } + .column.is-offset-10-touch { + margin-left: 83.33333%; } + .column.is-11-touch { + flex: none; + width: 91.66667%; } + .column.is-offset-11-touch { + margin-left: 91.66667%; } + .column.is-12-touch { + flex: none; + width: 100%; } + .column.is-offset-12-touch { + margin-left: 100%; } } + @media screen and (min-width: 1056px) { + .column.is-narrow-desktop { + flex: none; } + .column.is-full-desktop { + flex: none; + width: 100%; } + .column.is-three-quarters-desktop { + flex: none; + width: 75%; } + .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; } + .column.is-half-desktop { + flex: none; + width: 50%; } + .column.is-one-third-desktop { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-desktop { + flex: none; + width: 25%; } + .column.is-one-fifth-desktop { + flex: none; + width: 20%; } + .column.is-two-fifths-desktop { + flex: none; + width: 40%; } + .column.is-three-fifths-desktop { + flex: none; + width: 60%; } + .column.is-four-fifths-desktop { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-desktop { + margin-left: 75%; } + .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; } + .column.is-offset-half-desktop { + margin-left: 50%; } + .column.is-offset-one-third-desktop { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-desktop { + margin-left: 25%; } + .column.is-offset-one-fifth-desktop { + margin-left: 20%; } + .column.is-offset-two-fifths-desktop { + margin-left: 40%; } + .column.is-offset-three-fifths-desktop { + margin-left: 60%; } + .column.is-offset-four-fifths-desktop { + margin-left: 80%; } + .column.is-0-desktop { + flex: none; + width: 0%; } + .column.is-offset-0-desktop { + margin-left: 0%; } + .column.is-1-desktop { + flex: none; + width: 8.33333%; } + .column.is-offset-1-desktop { + margin-left: 8.33333%; } + .column.is-2-desktop { + flex: none; + width: 16.66667%; } + .column.is-offset-2-desktop { + margin-left: 16.66667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.33333%; } + .column.is-offset-4-desktop { + margin-left: 33.33333%; } + .column.is-5-desktop { + flex: none; + width: 41.66667%; } + .column.is-offset-5-desktop { + margin-left: 41.66667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.33333%; } + .column.is-offset-7-desktop { + margin-left: 58.33333%; } + .column.is-8-desktop { + flex: none; + width: 66.66667%; } + .column.is-offset-8-desktop { + margin-left: 66.66667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.33333%; } + .column.is-offset-10-desktop { + margin-left: 83.33333%; } + .column.is-11-desktop { + flex: none; + width: 91.66667%; } + .column.is-offset-11-desktop { + margin-left: 91.66667%; } + .column.is-12-desktop { + flex: none; + width: 100%; } + .column.is-offset-12-desktop { + margin-left: 100%; } } + @media screen and (min-width: 1216px) { + .column.is-narrow-widescreen { + flex: none; } + .column.is-full-widescreen { + flex: none; + width: 100%; } + .column.is-three-quarters-widescreen { + flex: none; + width: 75%; } + .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; } + .column.is-half-widescreen { + flex: none; + width: 50%; } + .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-widescreen { + flex: none; + width: 25%; } + .column.is-one-fifth-widescreen { + flex: none; + width: 20%; } + .column.is-two-fifths-widescreen { + flex: none; + width: 40%; } + .column.is-three-fifths-widescreen { + flex: none; + width: 60%; } + .column.is-four-fifths-widescreen { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-widescreen { + margin-left: 75%; } + .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; } + .column.is-offset-half-widescreen { + margin-left: 50%; } + .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-widescreen { + margin-left: 25%; } + .column.is-offset-one-fifth-widescreen { + margin-left: 20%; } + .column.is-offset-two-fifths-widescreen { + margin-left: 40%; } + .column.is-offset-three-fifths-widescreen { + margin-left: 60%; } + .column.is-offset-four-fifths-widescreen { + margin-left: 80%; } + .column.is-0-widescreen { + flex: none; + width: 0%; } + .column.is-offset-0-widescreen { + margin-left: 0%; } + .column.is-1-widescreen { + flex: none; + width: 8.33333%; } + .column.is-offset-1-widescreen { + margin-left: 8.33333%; } + .column.is-2-widescreen { + flex: none; + width: 16.66667%; } + .column.is-offset-2-widescreen { + margin-left: 16.66667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.33333%; } + .column.is-offset-4-widescreen { + margin-left: 33.33333%; } + .column.is-5-widescreen { + flex: none; + width: 41.66667%; } + .column.is-offset-5-widescreen { + margin-left: 41.66667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.33333%; } + .column.is-offset-7-widescreen { + margin-left: 58.33333%; } + .column.is-8-widescreen { + flex: none; + width: 66.66667%; } + .column.is-offset-8-widescreen { + margin-left: 66.66667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.33333%; } + .column.is-offset-10-widescreen { + margin-left: 83.33333%; } + .column.is-11-widescreen { + flex: none; + width: 91.66667%; } + .column.is-offset-11-widescreen { + margin-left: 91.66667%; } + .column.is-12-widescreen { + flex: none; + width: 100%; } + .column.is-offset-12-widescreen { + margin-left: 100%; } } + @media screen and (min-width: 1408px) { + .column.is-narrow-fullhd { + flex: none; } + .column.is-full-fullhd { + flex: none; + width: 100%; } + .column.is-three-quarters-fullhd { + flex: none; + width: 75%; } + .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; } + .column.is-half-fullhd { + flex: none; + width: 50%; } + .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-fullhd { + flex: none; + width: 25%; } + .column.is-one-fifth-fullhd { + flex: none; + width: 20%; } + .column.is-two-fifths-fullhd { + flex: none; + width: 40%; } + .column.is-three-fifths-fullhd { + flex: none; + width: 60%; } + .column.is-four-fifths-fullhd { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-fullhd { + margin-left: 75%; } + .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; } + .column.is-offset-half-fullhd { + margin-left: 50%; } + .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-fullhd { + margin-left: 25%; } + .column.is-offset-one-fifth-fullhd { + margin-left: 20%; } + .column.is-offset-two-fifths-fullhd { + margin-left: 40%; } + .column.is-offset-three-fifths-fullhd { + margin-left: 60%; } + .column.is-offset-four-fifths-fullhd { + margin-left: 80%; } + .column.is-0-fullhd { + flex: none; + width: 0%; } + .column.is-offset-0-fullhd { + margin-left: 0%; } + .column.is-1-fullhd { + flex: none; + width: 8.33333%; } + .column.is-offset-1-fullhd { + margin-left: 8.33333%; } + .column.is-2-fullhd { + flex: none; + width: 16.66667%; } + .column.is-offset-2-fullhd { + margin-left: 16.66667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.33333%; } + .column.is-offset-4-fullhd { + margin-left: 33.33333%; } + .column.is-5-fullhd { + flex: none; + width: 41.66667%; } + .column.is-offset-5-fullhd { + margin-left: 41.66667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.33333%; } + .column.is-offset-7-fullhd { + margin-left: 58.33333%; } + .column.is-8-fullhd { + flex: none; + width: 66.66667%; } + .column.is-offset-8-fullhd { + margin-left: 66.66667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.33333%; } + .column.is-offset-10-fullhd { + margin-left: 83.33333%; } + .column.is-11-fullhd { + flex: none; + width: 91.66667%; } + .column.is-offset-11-fullhd { + margin-left: 91.66667%; } + .column.is-12-fullhd { + flex: none; + width: 100%; } + .column.is-offset-12-fullhd { + margin-left: 100%; } } + +.columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .columns:last-child { + margin-bottom: -0.75rem; } + .columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); } + .columns.is-centered { + justify-content: center; } + .columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; } + .columns.is-gapless > .column { + margin: 0; + padding: 0 !important; } + .columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; } + .columns.is-gapless:last-child { + margin-bottom: 0; } + .columns.is-mobile { + display: flex; } + .columns.is-multiline { + flex-wrap: wrap; } + .columns.is-vcentered { + align-items: center; } + @media screen and (min-width: 769px), print { + .columns:not(.is-desktop) { + display: flex; } } + @media screen and (min-width: 1056px) { + .columns.is-desktop { + display: flex; } } + +.columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); } + .columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); } + .columns.is-variable.is-0 { + --columnGap: 0rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-0-mobile { + --columnGap: 0rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-0-tablet { + --columnGap: 0rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-0-tablet-only { + --columnGap: 0rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-0-touch { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-0-desktop { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-0-desktop-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-0-widescreen { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-0-widescreen-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-0-fullhd { + --columnGap: 0rem; } } + .columns.is-variable.is-1 { + --columnGap: 0.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-1-mobile { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-1-tablet { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-1-tablet-only { + --columnGap: 0.25rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-1-touch { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-1-desktop { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-1-desktop-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-1-widescreen { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-1-widescreen-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-1-fullhd { + --columnGap: 0.25rem; } } + .columns.is-variable.is-2 { + --columnGap: 0.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-2-mobile { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-2-tablet { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-2-tablet-only { + --columnGap: 0.5rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-2-touch { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-2-desktop { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-2-desktop-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-2-widescreen { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-2-widescreen-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-2-fullhd { + --columnGap: 0.5rem; } } + .columns.is-variable.is-3 { + --columnGap: 0.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-3-mobile { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-3-tablet { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-3-tablet-only { + --columnGap: 0.75rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-3-touch { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-3-desktop { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-3-desktop-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-3-widescreen { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-3-widescreen-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-3-fullhd { + --columnGap: 0.75rem; } } + .columns.is-variable.is-4 { + --columnGap: 1rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-4-mobile { + --columnGap: 1rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-4-tablet { + --columnGap: 1rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-4-tablet-only { + --columnGap: 1rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-4-touch { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-4-desktop { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-4-desktop-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-4-widescreen { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-4-widescreen-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-4-fullhd { + --columnGap: 1rem; } } + .columns.is-variable.is-5 { + --columnGap: 1.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-5-mobile { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-5-tablet { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-5-tablet-only { + --columnGap: 1.25rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-5-touch { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-5-desktop { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-5-desktop-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-5-widescreen { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-5-widescreen-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-5-fullhd { + --columnGap: 1.25rem; } } + .columns.is-variable.is-6 { + --columnGap: 1.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-6-mobile { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-6-tablet { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-6-tablet-only { + --columnGap: 1.5rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-6-touch { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-6-desktop { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-6-desktop-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-6-widescreen { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-6-widescreen-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-6-fullhd { + --columnGap: 1.5rem; } } + .columns.is-variable.is-7 { + --columnGap: 1.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-7-mobile { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-7-tablet { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-7-tablet-only { + --columnGap: 1.75rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-7-touch { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-7-desktop { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-7-desktop-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-7-widescreen { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-7-widescreen-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-7-fullhd { + --columnGap: 1.75rem; } } + .columns.is-variable.is-8 { + --columnGap: 2rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-8-mobile { + --columnGap: 2rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-8-tablet { + --columnGap: 2rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-8-tablet-only { + --columnGap: 2rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-8-touch { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-8-desktop { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-8-desktop-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-8-widescreen { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-8-widescreen-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-8-fullhd { + --columnGap: 2rem; } } + +.tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: min-content; } + .tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .tile.is-ancestor:last-child { + margin-bottom: -0.75rem; } + .tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; } + .tile.is-child { + margin: 0 !important; } + .tile.is-parent { + padding: 0.75rem; } + .tile.is-vertical { + flex-direction: column; } + .tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; } + @media screen and (min-width: 769px), print { + .tile:not(.is-child) { + display: flex; } + .tile.is-1 { + flex: none; + width: 8.33333%; } + .tile.is-2 { + flex: none; + width: 16.66667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.33333%; } + .tile.is-5 { + flex: none; + width: 41.66667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.33333%; } + .tile.is-8 { + flex: none; + width: 66.66667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.33333%; } + .tile.is-11 { + flex: none; + width: 91.66667%; } + .tile.is-12 { + flex: none; + width: 100%; } } + +.hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; } + .hero .navbar { + background: none; } + .hero .tabs ul { + border-bottom: none; } + .hero.is-white { + background-color: white; + color: #0a0a0a; } + .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-white strong { + color: inherit; } + .hero.is-white .title { + color: #0a0a0a; } + .hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); } + .hero.is-white .subtitle a:not(.button), + .hero.is-white .subtitle strong { + color: #0a0a0a; } + @media screen and (max-width: 1055px) { + .hero.is-white .navbar-menu { + background-color: white; } } + .hero.is-white .navbar-item, + .hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); } + .hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, + .hero.is-white .navbar-link:hover, + .hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; } + .hero.is-white .tabs a:hover { + opacity: 1; } + .hero.is-white .tabs li.is-active a { + opacity: 1; } + .hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; } + .hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } + .hero.is-black { + background-color: #0a0a0a; + color: white; } + .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-black strong { + color: inherit; } + .hero.is-black .title { + color: white; } + .hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-black .subtitle a:not(.button), + .hero.is-black .subtitle strong { + color: white; } + @media screen and (max-width: 1055px) { + .hero.is-black .navbar-menu { + background-color: #0a0a0a; } } + .hero.is-black .navbar-item, + .hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, + .hero.is-black .navbar-link:hover, + .hero.is-black .navbar-link.is-active { + background-color: black; + color: white; } + .hero.is-black .tabs a { + color: white; + opacity: 0.9; } + .hero.is-black .tabs a:hover { + opacity: 1; } + .hero.is-black .tabs li.is-active a { + opacity: 1; } + .hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { + color: white; } + .hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; } + .hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } + @media screen and (max-width: 768px) { + .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } + .hero.is-light { + background-color: whitesmoke; + color: #363636; } + .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-light strong { + color: inherit; } + .hero.is-light .title { + color: #363636; } + .hero.is-light .subtitle { + color: rgba(54, 54, 54, 0.9); } + .hero.is-light .subtitle a:not(.button), + .hero.is-light .subtitle strong { + color: #363636; } + @media screen and (max-width: 1055px) { + .hero.is-light .navbar-menu { + background-color: whitesmoke; } } + .hero.is-light .navbar-item, + .hero.is-light .navbar-link { + color: rgba(54, 54, 54, 0.7); } + .hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, + .hero.is-light .navbar-link:hover, + .hero.is-light .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .hero.is-light .tabs a { + color: #363636; + opacity: 0.9; } + .hero.is-light .tabs a:hover { + opacity: 1; } + .hero.is-light .tabs li.is-active a { + opacity: 1; } + .hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { + color: #363636; } + .hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .hero.is-light.is-bold { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } } + .hero.is-dark, .content kbd.hero { + background-color: #363636; + color: whitesmoke; } + .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-dark strong, + .content kbd.hero strong { + color: inherit; } + .hero.is-dark .title, .content kbd.hero .title { + color: whitesmoke; } + .hero.is-dark .subtitle, .content kbd.hero .subtitle { + color: rgba(245, 245, 245, 0.9); } + .hero.is-dark .subtitle a:not(.button), .content kbd.hero .subtitle a:not(.button), + .hero.is-dark .subtitle strong, + .content kbd.hero .subtitle strong { + color: whitesmoke; } + @media screen and (max-width: 1055px) { + .hero.is-dark .navbar-menu, .content kbd.hero .navbar-menu { + background-color: #363636; } } + .hero.is-dark .navbar-item, .content kbd.hero .navbar-item, + .hero.is-dark .navbar-link, + .content kbd.hero .navbar-link { + color: rgba(245, 245, 245, 0.7); } + .hero.is-dark a.navbar-item:hover, .content kbd.hero a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, .content kbd.hero a.navbar-item.is-active, + .hero.is-dark .navbar-link:hover, + .content kbd.hero .navbar-link:hover, + .hero.is-dark .navbar-link.is-active, + .content kbd.hero .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .hero.is-dark .tabs a, .content kbd.hero .tabs a { + color: whitesmoke; + opacity: 0.9; } + .hero.is-dark .tabs a:hover, .content kbd.hero .tabs a:hover { + opacity: 1; } + .hero.is-dark .tabs li.is-active a, .content kbd.hero .tabs li.is-active a { + opacity: 1; } + .hero.is-dark .tabs.is-boxed a, .content kbd.hero .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a, .content kbd.hero .tabs.is-toggle a { + color: whitesmoke; } + .hero.is-dark .tabs.is-boxed a:hover, .content kbd.hero .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover, .content kbd.hero .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-dark .tabs.is-boxed li.is-active a, .content kbd.hero .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .content kbd.hero .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover, .content kbd.hero .tabs.is-toggle li.is-active a:hover { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .hero.is-dark.is-bold, .content kbd.hero.is-bold { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } + @media screen and (max-width: 768px) { + .hero.is-dark.is-bold .navbar-menu, .content kbd.hero.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } } + .hero.is-primary, .docstring > section > a.hero.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-primary strong, + .docstring > section > a.hero.docs-sourcelink strong { + color: inherit; } + .hero.is-primary .title, .docstring > section > a.hero.docs-sourcelink .title { + color: #fff; } + .hero.is-primary .subtitle, .docstring > section > a.hero.docs-sourcelink .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-primary .subtitle a:not(.button), .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), + .hero.is-primary .subtitle strong, + .docstring > section > a.hero.docs-sourcelink .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-primary .navbar-menu, .docstring > section > a.hero.docs-sourcelink .navbar-menu { + background-color: #4eb5de; } } + .hero.is-primary .navbar-item, .docstring > section > a.hero.docs-sourcelink .navbar-item, + .hero.is-primary .navbar-link, + .docstring > section > a.hero.docs-sourcelink .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-primary a.navbar-item:hover, .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, + .hero.is-primary .navbar-link:hover, + .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, + .hero.is-primary .navbar-link.is-active, + .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .hero.is-primary .tabs a, .docstring > section > a.hero.docs-sourcelink .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-primary .tabs a:hover, .docstring > section > a.hero.docs-sourcelink .tabs a:hover { + opacity: 1; } + .hero.is-primary .tabs li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { + opacity: 1; } + .hero.is-primary .tabs.is-boxed a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { + color: #fff; } + .hero.is-primary .tabs.is-boxed a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-primary .tabs.is-boxed li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + opacity: 1; } + .hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { + color: #fff; } + .hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #da0b00; } + .hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } + @media screen and (max-width: 768px) { + .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } } + .hero.is-small .hero-body, #documenter .docs-sidebar form.docs-search > input.hero .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; } + @media screen and (min-width: 769px), print { + .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; } } + @media screen and (min-width: 769px), print { + .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; } } + .hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { + align-items: center; + display: flex; } + .hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; } + .hero.is-halfheight { + min-height: 50vh; } + .hero.is-fullheight { + min-height: 100vh; } + +.hero-video { + overflow: hidden; } + .hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + transform: translate3d(-50%, -50%, 0); } + .hero-video.is-transparent { + opacity: 0.3; } + @media screen and (max-width: 768px) { + .hero-video { + display: none; } } + +.hero-buttons { + margin-top: 1.5rem; } + @media screen and (max-width: 768px) { + .hero-buttons .button { + display: flex; } + .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; } } + @media screen and (min-width: 769px), print { + .hero-buttons { + display: flex; + justify-content: center; } + .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; } } + +.hero-head, +.hero-foot { + flex-grow: 0; + flex-shrink: 0; } + +.hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; } + +.section { + padding: 3rem 1.5rem; } + @media screen and (min-width: 1056px) { + .section.is-medium { + padding: 9rem 1.5rem; } + .section.is-large { + padding: 18rem 1.5rem; } } + +.footer { + background-color: #fafafa; + padding: 3rem 1.5rem 6rem; } + +h1 .docs-heading-anchor, h1 .docs-heading-anchor:hover, h1 .docs-heading-anchor:visited, h2 .docs-heading-anchor, h2 .docs-heading-anchor:hover, h2 .docs-heading-anchor:visited, h3 .docs-heading-anchor, h3 .docs-heading-anchor:hover, h3 .docs-heading-anchor:visited, h4 .docs-heading-anchor, h4 .docs-heading-anchor:hover, h4 .docs-heading-anchor:visited, h5 .docs-heading-anchor, h5 .docs-heading-anchor:hover, h5 .docs-heading-anchor:visited, h6 .docs-heading-anchor, h6 .docs-heading-anchor:hover, h6 .docs-heading-anchor:visited { + color: #222222; } + +h1 .docs-heading-anchor-permalink, h2 .docs-heading-anchor-permalink, h3 .docs-heading-anchor-permalink, h4 .docs-heading-anchor-permalink, h5 .docs-heading-anchor-permalink, h6 .docs-heading-anchor-permalink { + visibility: hidden; + vertical-align: middle; + margin-left: 0.5em; + font-size: 0.7rem; } + h1 .docs-heading-anchor-permalink::before, h2 .docs-heading-anchor-permalink::before, h3 .docs-heading-anchor-permalink::before, h4 .docs-heading-anchor-permalink::before, h5 .docs-heading-anchor-permalink::before, h6 .docs-heading-anchor-permalink::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f0c1"; } + +h1:hover .docs-heading-anchor-permalink, h2:hover .docs-heading-anchor-permalink, h3:hover .docs-heading-anchor-permalink, h4:hover .docs-heading-anchor-permalink, h5:hover .docs-heading-anchor-permalink, h6:hover .docs-heading-anchor-permalink { + visibility: visible; } + +.docs-dark-only { + display: none !important; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 0.75rem; } + .admonition.is-medium { + font-size: 1.25rem; } + .admonition.is-large { + font-size: 1.5rem; } + .admonition.is-default { + background-color: #b5b5b5; + border-color: #363636; } + .admonition.is-default > .admonition-header { + background-color: #363636; + color: #fff; } + .admonition.is-default > .admonition-body { + color: #fff; } + .admonition.is-info { + background-color: #b8dffa; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #9beeb8; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ff857e; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: #fff; } + .admonition.is-compat { + background-color: #99e6f0; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75em; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 1em 1.25em; } + .admonition-body pre { + background-color: whitesmoke; } + .admonition-body code { + background-color: rgba(0, 0, 0, 0.05); } + +.docstring { + margin-bottom: 1em; + background-color: transparent; + border: 1px solid #dbdbdb; + box-shadow: 2px 2px 3px rgba(10, 10, 10, 0.1); + max-width: 100%; } + .docstring > header { + display: flex; + flex-grow: 1; + align-items: stretch; + padding: 0.75rem; + background-color: whitesmoke; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: none; + border-bottom: 1px solid #dbdbdb; } + .docstring > header code { + background-color: transparent; } + .docstring > header .docstring-binding { + margin-right: 0.3em; } + .docstring > header .docstring-category { + margin-left: 0.3em; } + .docstring > section { + position: relative; + padding: 1rem 1.25rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.625rem; + bottom: 0.5rem; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #222222; } + +.content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + +.content blockquote > ul:first-child, .content blockquote > ol:first-child, .content .admonition-body > ul:first-child, .content .admonition-body > ol:first-child { + margin-top: 0; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; + padding: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +/* This file contain the overall layout. + * + * The main container is
                                  that is identified by id #documenter. + */ +#documenter .docs-main > article { + overflow-wrap: break-word; } + #documenter .docs-main > article .math-container { + overflow-x: auto; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: white; + border-bottom: 1px solid #dbdbdb; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + #documenter .docs-main header.docs-navbar .docs-right { + display: flex; + white-space: nowrap; } + #documenter .docs-main header.docs-navbar .docs-right .docs-icon, #documenter .docs-main header.docs-navbar .docs-right .docs-label, #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + display: inline-block; } + #documenter .docs-main header.docs-navbar .docs-right .docs-label { + padding: 0; + margin-left: 0.3em; } + #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { + margin: auto 0 auto 1rem; } + #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + font-size: 1.5rem; + margin: auto 0 auto 1rem; } + #documenter .docs-main header.docs-navbar > * { + margin: auto 0; } + @media screen and (max-width: 1055px) { + #documenter .docs-main header.docs-navbar { + position: sticky; + top: 0; + padding: 0 1rem; + /* For Headroom.js */ + transition-property: top, box-shadow; + -webkit-transition-property: top, box-shadow; + /* Safari */ + transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + /* Safari */ } + #documenter .docs-main header.docs-navbar.headroom--not-top { + box-shadow: 0.2rem 0rem 0.4rem #bbb; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } + #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { + top: -4.5rem; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } } + +#documenter .docs-main section.footnotes { + border-top: 1px solid #dbdbdb; } + #documenter .docs-main section.footnotes li .tag:first-child, #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, #documenter .docs-main section.footnotes li .content kbd:first-child, .content #documenter .docs-main section.footnotes li kbd:first-child { + margin-right: 1em; + margin-bottom: 0.4em; } + +#documenter .docs-main .docs-footer { + display: flex; + flex-wrap: wrap; + margin-left: 0; + margin-right: 0; + border-top: 1px solid #dbdbdb; + padding-top: 1rem; + padding-bottom: 1rem; } + @media screen and (max-width: 1055px) { + #documenter .docs-main .docs-footer { + padding-left: 1rem; + padding-right: 1rem; } } + #documenter .docs-main .docs-footer .docs-footer-nextpage, #documenter .docs-main .docs-footer .docs-footer-prevpage { + flex-grow: 1; } + #documenter .docs-main .docs-footer .docs-footer-nextpage { + text-align: right; } + #documenter .docs-main .docs-footer .flexbox-break { + flex-basis: 100%; + height: 0; } + #documenter .docs-main .docs-footer .footer-message { + font-size: 0.8em; + margin: 0.5em auto 0 auto; + text-align: center; } + +#documenter .docs-sidebar { + display: flex; + flex-direction: column; + color: #0a0a0a; + background-color: whitesmoke; + border-right: 1px solid #dbdbdb; + padding: 0; + flex: 0 0 18rem; + z-index: 5; + font-size: 1rem; + position: fixed; + left: -18rem; + width: 18rem; + height: 100%; + transition: left 0.3s; + /* Setting up a nicer theme style for the scrollbar */ } + #documenter .docs-sidebar.visible { + left: 0; + box-shadow: 0.4rem 0rem 0.8rem #bbb; } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar.visible { + box-shadow: none; } } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar { + left: 0; + top: 0; } } + #documenter .docs-sidebar .docs-logo { + margin-top: 1rem; + padding: 0 1rem; } + #documenter .docs-sidebar .docs-logo > img { + max-height: 6rem; + margin: auto; } + #documenter .docs-sidebar .docs-package-name { + flex-shrink: 0; + font-size: 1.5rem; + font-weight: 700; + text-align: center; + white-space: nowrap; + overflow: hidden; + padding: 0.5rem 0; } + #documenter .docs-sidebar .docs-package-name .docs-autofit { + max-width: 16.2rem; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* Managing collapsible submenus */ } + #documenter .docs-sidebar ul.docs-menu > li > .tocitem { + font-weight: bold; } + #documenter .docs-sidebar ul.docs-menu > li li { + font-size: 0.95rem; + margin-left: 1em; + border-left: 1px solid #dbdbdb; } + #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { + display: none; } + #documenter .docs-sidebar ul.docs-menu ul.collapsed { + display: none; } + #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { + display: block; } + #documenter .docs-sidebar ul.docs-menu label.tocitem { + display: flex; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { + flex-grow: 2; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + font-size: 0.75rem; + margin-left: 1rem; + margin-top: auto; + margin-bottom: auto; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f054"; } + #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { + content: "\f078"; } + #documenter .docs-sidebar ul.docs-menu .tocitem { + display: block; + padding: 0.5rem 0.5rem; } + #documenter .docs-sidebar ul.docs-menu .tocitem, #documenter .docs-sidebar ul.docs-menu .tocitem:hover { + color: #0a0a0a; + background: whitesmoke; } + #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { + color: #0a0a0a; + background-color: #ebebeb; } + #documenter .docs-sidebar ul.docs-menu li.is-active { + border-top: 1px solid #dbdbdb; + border-bottom: 1px solid #dbdbdb; + background-color: white; } + #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { + background-color: white; + color: #0a0a0a; } + #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { + background-color: #ebebeb; + color: #0a0a0a; } + #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { + border-top: none; } + #documenter .docs-sidebar ul.docs-menu ul.internal { + margin: 0 0.5rem 0.5rem; + border-top: 1px solid #dbdbdb; } + #documenter .docs-sidebar ul.docs-menu ul.internal li { + font-size: 0.85rem; + border-left: none; + margin-left: 0; + margin-top: 0.5rem; } + #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { + width: 100%; + padding: 0; } + #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { + content: "⚬"; + margin-right: 0.4em; } + #documenter .docs-sidebar form.docs-search { + margin: auto; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + #documenter .docs-sidebar form.docs-search > input { + width: 14.4rem; } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar ul.docs-menu { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { + width: .3rem; + background: none; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #e0e0e0; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { + background: #cccccc; } } + @media screen and (max-width: 1055px) { + #documenter .docs-sidebar { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + #documenter .docs-sidebar::-webkit-scrollbar { + width: .3rem; + background: none; } + #documenter .docs-sidebar::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #e0e0e0; } + #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { + background: #cccccc; } } + +#documenter .docs-main #documenter-search-info { + margin-bottom: 1rem; } + +#documenter .docs-main #documenter-search-results { + list-style-type: circle; + list-style-position: outside; } + #documenter .docs-main #documenter-search-results li { + margin-left: 2rem; } + #documenter .docs-main #documenter-search-results .docs-highlight { + background-color: yellow; } + +/* + +Original highlight.js style (c) Ivan Sagalaev + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #F0F0F0; } + +/* Base color: saturation 0; */ +.hljs, +.hljs-subst { + color: #444; } + +.hljs-comment { + color: #888888; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* User color: hue: 0 */ +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #880000; } + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; } + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #BC6060; } + +/* Language color: hue: 90; */ +.hljs-literal { + color: #78A960; } + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; } + +/* Meta color: hue: 200 */ +.hljs-meta { + color: #1f7199; } + +.hljs-meta-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/v0.11.9/assets/themeswap.js b/v0.11.9/assets/themeswap.js new file mode 100644 index 00000000..d4666841 --- /dev/null +++ b/v0.11.9/assets/themeswap.js @@ -0,0 +1,42 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Browser does not support Web Storage, bail early. + if(typeof(window.localStorage) === "undefined") return; + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + var theme = window.localStorage.getItem("documenter-theme"); + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; var disabled = []; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if(themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null); + // If we find a matching theme (and it's not the default), we'll set active to non-null + if(!isprimary && themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if(themename !== theme) disabled.push(ss); + } + if(active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + theme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } +} +set_theme_from_local_storage(); diff --git a/v0.11.9/index.html b/v0.11.9/index.html new file mode 100644 index 00000000..60547f64 --- /dev/null +++ b/v0.11.9/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                  MathematicalSystems.jl

                                  MathematicalSystems is a Julia package for mathematical systems interfaces.

                                  Features

                                  • Generic and flexible systems definitions, while being fast and type stable.
                                  • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                                  • Iterator interfaces to handle constant or time-varying inputs.

                                  Ecosystem

                                  The following packages use MathematicalSystems.jl:

                                  Manual Outline

                                  Library Outline

                                  diff --git a/v0.11.9/lib/internals/index.html b/v0.11.9/lib/internals/index.html new file mode 100644 index 00000000..80c5a2f7 --- /dev/null +++ b/v0.11.9/lib/internals/index.html @@ -0,0 +1,58 @@ + +Internals · MathematicalSystems.jl

                                  Internals

                                  This section describes functions that are internal to the library.

                                  Expression handling

                                  MathematicalSystems._corresponding_typeFunction
                                  _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                                  Return the system type whose field names match those in fields.

                                  Input

                                  • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                                  • fields – tuple of field names

                                  Output

                                  The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                                  Examples

                                  julia> using MathematicalSystems: _corresponding_type
                                  +
                                  +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                                  +LinearContinuousSystem
                                  +
                                  +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                                  +ConstrainedLinearControlContinuousSystem
                                  source
                                  MathematicalSystems._capture_dimFunction
                                  _capture_dim(expr)

                                  Return the tuple containing the dimension(s) in expr.

                                  Input

                                  • expr – symbolic expression that can be of any of the following forms:

                                    • :x or :(x) – state dimension
                                    • :(x, u) – state and input dimension
                                    • :(x, u, w) – state, input and noise dimensions

                                  Output

                                  • The scalar x if expr specifies the state dimension.
                                  • The vector [x, u] if expr specifies state and input dimension.
                                  • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                                  source
                                  MathematicalSystems.extract_dyn_equation_parametersFunction
                                  extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)

                                  Extract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.

                                  For the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list

                                  • (:A_user, :A)
                                  • (:B_user, :B)
                                  • (:c_user, :c)
                                  • (:D_user, :D)
                                  • (:f_user, :f)
                                  • (:statedim_user :statedim)
                                  • (:inputdim_user :inputdim)
                                  • (:noisedim_user :noisedim)

                                  and for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.

                                  Input

                                  • equation – dynamic equation
                                  • state – state variable
                                  • input – input variable
                                  • noise – noise variable
                                  • dim – dimensionality
                                  • AT – abstract system type

                                  Output

                                  Two arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.

                                  source
                                  MathematicalSystems.add_asteriskFunction
                                  add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                                  Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                                  Input

                                  • summand – expressions
                                  • state – state variable
                                  • input – input variable
                                  • noise – noise variable

                                  Output

                                  Multiplication expression or symbol.

                                  Example

                                  julia> using MathematicalSystems: add_asterisk
                                  +
                                  +julia> add_asterisk(:(A1*x), :x, :u, :w)
                                  +:(A1 * x)
                                  +
                                  +julia> add_asterisk(:(c1), :x, :u, :w)
                                  +:c1
                                  +
                                  +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                                  +:(A * x1)
                                  +
                                  +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                                  +:(A * wb)
                                  +
                                  +julia> add_asterisk(:(A1u), :x, :u, :w)
                                  +:(A1 * u)
                                  +
                                  +julia> add_asterisk(:(A1ub), :x, :u, :w)
                                  +:A1ub
                                  source
                                  Base.sortFunction
                                  sort(parameters::Vector, order::Tuple)

                                  Filter and sort the vector parameters according to order.

                                  Input

                                  • parameters – vector of tuples
                                  • order – tuple of symbols

                                  Output

                                  A new vector of tuples corresponding to parameters filtered and sorted according to order.

                                  Examples

                                  julia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];
                                  +
                                  +julia> sort(parameters, (:X, :U, :W))
                                  +3-element Array{Tuple{Any,Symbol},1}:
                                  + (:X1, :X)
                                  + (:U1, :U)
                                  + (:W1, :W)
                                  +
                                  +julia>  parameters = [(:const, :c), (:A, :A)];
                                  +
                                  +julia> sort(parameters, (:A, :B, :c, :D))
                                  +2-element Array{Tuple{Any,Symbol},1}:
                                  + (:A, :A)
                                  + (:const, :c)

                                  Notes

                                  parameters is a vector that contains tuples whose second element is considered for the sorting according to order.

                                  If a value of order is not contained in parameters, the corresponding entry of order will be omitted.

                                  source

                                  Querying expressions

                                  MathematicalSystems.is_equationFunction
                                  is_equation(expr)

                                  Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                                  Input

                                  • expr – expression

                                  Output

                                  A Bool indicating whether expr is an equation or not.

                                  source
                                  MathematicalSystems.extract_sumFunction
                                  extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                                  Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                                  Input

                                  • summands – array of expressions
                                  • state – state variable
                                  • input – input variable
                                  • noise – noise variable

                                  Output

                                  Array of tuples of symbols with variable name and field name.

                                  Example

                                  julia> using MathematicalSystems: extract_sum
                                  +
                                  +julia> extract_sum([:(A1*x)], :x, :u, :w)
                                  +1-element Array{Tuple{Any,Symbol},1}:
                                  + (:(hcat(A1)), :A)
                                  +
                                  +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                                  +3-element Array{Tuple{Any,Symbol},1}:
                                  + (:(hcat(A1)), :A)
                                  + (:(hcat(B1)), :B)
                                  + (:(vcat(c)), :c)
                                  +
                                  +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                                  +3-element Array{Tuple{Any,Symbol},1}:
                                  + (:(hcat(A1)), :A)
                                  + (:(hcat(B1)), :B)
                                  + (:(hcat(B2)), :D)

                                  Notes

                                  If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                                  If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                                  Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                                  source

                                  Evaluation of AbstractSystem at given state

                                  MathematicalSystems._instantiateFunction
                                  _instantiate(system::AbstractSystem, x::AbstractVector;
                                  +            [check_constraints]=true)

                                  Return the result of instantiating an AbstractSystem at the current state.

                                  Input

                                  • systemAbstractSystem
                                  • x – state (it should be any vector type)
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The result of applying the system to state x.

                                  Notes

                                  The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                                  source
                                  _instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;
                                  +            [check_constraints]=true)

                                  Return the result of instantiating an AbstractSystem at the current state and applying one input.

                                  Input

                                  • systemAbstractSystem
                                  • x – state (it should be any vector type)
                                  • u – input (it should be any vector type) or noise, if system is not controlled
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The result of applying the system to state x and input u.

                                  Notes

                                  If the system is not controlled but noisy, the input u is interpreted as noise.

                                  The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                                  source
                                  _instantiate(system::AbstractSystem,
                                  +            x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                  Return the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.

                                  Input

                                  • systemAbstractSystem
                                  • x – state (it should be any vector type)
                                  • u – input (it should be any vector type)
                                  • w – noise (it should be any vector type)
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The result of applying the system to state x, input u and noise w.

                                  Notes

                                  The _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.

                                  source

                                  Naming convention for systems' fields

                                  Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.

                                  FieldDescriptionGetter function
                                  Astate matrixstate_matrix
                                  Binput matrixinput_matrix
                                  caffine termaffine_term
                                  Dnoise matrixnoise_matrix
                                  Xstate constraintsstateset
                                  Uinput constraintsinputset
                                  Wdisturbance setnoiseset
                                  diff --git a/v0.11.9/lib/methods/index.html b/v0.11.9/lib/methods/index.html new file mode 100644 index 00000000..08d984b8 --- /dev/null +++ b/v0.11.9/lib/methods/index.html @@ -0,0 +1,17 @@ + +Methods · MathematicalSystems.jl

                                  Methods

                                  This section describes systems methods implemented in MathematicalSystems.jl.

                                  States

                                  Inputs

                                  MathematicalSystems.nextinputFunction
                                  nextinput(input::ConstantInput, n::Int=1)

                                  Returns the first n elements of this input.

                                  Input

                                  • input – a constant input
                                  • n – (optional, default: 1) the number of desired elements

                                  Output

                                  A repeated iterator that generates n equal samples of this input.

                                  source
                                  nextinput(input::VaryingInput, n::Int=1)

                                  Returns the first n elements of this input.

                                  Input

                                  • input – varying input
                                  • n – (optional, default: 1) number of desired elements

                                  Output

                                  An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                  source

                                  Noises

                                  Output

                                  Traits

                                  MathematicalSystems.islinearMethod
                                  islinear(s::AbstractSystem)

                                  Specifies if the dynamics of system s is specified by linear equations.

                                  Notes

                                  We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                                  [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                                  source
                                  MathematicalSystems.islinearMethod
                                  islinear(m::AbstractMap)

                                  Specifies if the map m is linear or not.

                                  Notes

                                  A map is linear if it preserves the operations of scalar multiplication and vector addition.

                                  source
                                  MathematicalSystems.isaffineMethod
                                  isaffine(s::AbstractSystem)

                                  Specifies if the dynamics of system s is specified by affine equations.

                                  Notes

                                  An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                                  source
                                  MathematicalSystems.ispolynomialMethod
                                  ispolynomial(s::AbstractSystem)

                                  Specifies if the dynamics of system s is specified by polynomial equations.

                                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                                  source
                                  MathematicalSystems.isblackboxMethod
                                  isblackbox(s::AbstractSystem)

                                  Specifies if no specific structure is assumed for the dynamics of system s.

                                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                                  source
                                  MathematicalSystems.isnoisyMethod
                                  isnoisy(s::AbstractSystem)

                                  Determines if the dynamics of system s contains a noise term w.

                                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                                  source
                                  MathematicalSystems.iscontrolledMethod
                                  iscontrolled(s::AbstractSystem)

                                  Determines if the dynamics of system s contains a control input u.

                                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                                  source
                                  MathematicalSystems.isconstrainedMethod
                                  isconstrained(s::AbstractSystem)

                                  Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                                  The result of this function only depends on the system type, not the value, and can also be applied to typeof(s).

                                  source
                                  MathematicalSystems.state_matrixMethod
                                  state_matrix(s::AbstractSystem)

                                  Return the state matrix of an affine system.

                                  Notes

                                  The state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system $x' = Ax$.

                                  source
                                  MathematicalSystems.input_matrixMethod
                                  input_matrix(s::AbstractSystem)

                                  Return the input matrix of a system with linear input.

                                  Notes

                                  The input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, $x' = Ax + Bu$.

                                  source
                                  MathematicalSystems.noise_matrixMethod
                                  noise_matrix(s::AbstractSystem)

                                  Return the noise matrix of a system with linear noise.

                                  Notes

                                  The noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, $x' = Ax + Dw$.

                                  source
                                  MathematicalSystems.affine_termMethod
                                  affine_term(s::AbstractSystem)

                                  Return the affine term in an affine system.

                                  Notes

                                  The affine term is e.g. the vector $c$ in the affine system $x' = Ax + c$.

                                  source

                                  Maps

                                  Successor

                                  MathematicalSystems.successorFunction
                                  successor(system::DiscreteIdentitySystem, x::AbstractVector)

                                  Return the successor state of a DiscreteIdentitySystem.

                                  Input

                                  • systemDiscreteIdentitySystem
                                  • x – state (it should be any vector type)

                                  Output

                                  The same state x.

                                  source
                                  successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                                  +          [check_constraints]=true)

                                  Return the successor state of a ConstrainedDiscreteIdentitySystem.

                                  Input

                                  • systemConstrainedDiscreteIdentitySystem
                                  • x – state (it should be any vector type)
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The same state x.

                                  source
                                  successor(system::AbstractDiscreteSystem, x::AbstractVector;
                                  +          [check_constraints]=true)

                                  Return the successor state of an AbstractDiscreteSystem.

                                  Input

                                  • systemAbstractDiscreteSystem
                                  • x – state (it should be any vector type)
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The result of applying the system to state x.

                                  source
                                  successor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;
                                  +          [check_constraints]=true)

                                  Return the successor state of an AbstractDiscreteSystem.

                                  Input

                                  • systemAbstractDiscreteSystem
                                  • x – state (it should be any vector type)
                                  • u – input (it should be any vector type) or noise, if system is not controlled
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The result of applying the system to state x and input u.

                                  Notes

                                  If the system is not controlled but noisy, the input u is interpreted as noise.

                                  source
                                  successor(system::AbstractDiscreteSystem,
                                  +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                  Return the successor state of an AbstractDiscreteSystem.

                                  Input

                                  • systemAbstractDiscreteSystem
                                  • x – state (it should be any vector type)
                                  • u – input (it should be any vector type)
                                  • w – noise (it should be any vector type)
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The result of applying the system to state x, input u and noise w.

                                  source

                                  Vector Field

                                  MathematicalSystems.vector_fieldFunction
                                  vector_field(system::ContinuousIdentitySystem, x::AbstractVector)

                                  Return the vector field state of a ContinuousIdentitySystem.

                                  Input

                                  • systemContinuousIdentitySystem
                                  • x – state (it should be any vector type)

                                  Output

                                  A zeros vector of dimension statedim.

                                  source
                                  vector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;
                                  +          [check_constraints]=true)

                                  Return the vector field state of a ConstrainedContinuousIdentitySystem.

                                  Input

                                  • systemConstrainedContinuousIdentitySystem
                                  • x – state (it should be any vector type)
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  A zeros vector of dimension statedim.

                                  source
                                  vector_field(system::AbstractContinuousSystem, x::AbstractVector;
                                  +          [check_constraints]=true)

                                  Return the vector field state of an AbstractContinuousSystem.

                                  Input

                                  • systemAbstractContinuousSystem
                                  • x – state (it should be any vector type)
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The vector field of the system at state x.

                                  source
                                  vector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;
                                  +          [check_constraints]=true)

                                  Return the vector field state of an AbstractContinuousSystem.

                                  Input

                                  • systemAbstractContinuousSystem
                                  • x – state (it should be any vector type)
                                  • u – input (it should be any vector type) or noise, if system is not controlled
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The vector field of the system at state x and applying input u.

                                  Notes

                                  If the system is not controlled but noisy, the input u is interpreted as noise.

                                  source
                                  vector_field(system::AbstractContinuousSystem,
                                  +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                  Return the vector field state of an AbstractContinuousSystem.

                                  Input

                                  • systemAbstractContinuousSystem
                                  • x – state (it should be any vector type)
                                  • u – input (it should be any vector type)
                                  • w – noise (it should be any vector type)
                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                  Output

                                  The vector field of the system at state x and applying input u and noise w.

                                  source

                                  Discretization

                                  MathematicalSystems.discretizeFunction
                                  discretize(system::AbstractContinuousSystem, ΔT::Real,
                                  +           algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),
                                  +           constructor=_default_complementary_constructor(system))

                                  Discretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.

                                  Input

                                  • system – an affine continuous system
                                  • ΔT – sampling time
                                  • algorithm – (optional, default: ExactDiscretization()) discretization algorithm
                                  • constructor – (optional, default: _default_complementary_constructor(system)) construction method

                                  Output

                                  Returns a discretization of the input system system with discretization method algorithm and sampling time ΔT.

                                  source

                                  Internal Methods

                                  MathematicalSystems._discretizeFunction
                                  _discretize(::AbstractDiscretizationAlgorithm, ΔT::Real
                                  +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                                  Implementation of the discretization algorithm defined by the first input argument with sampling time ΔT.

                                  Input

                                  • `` – discretization algorithm, used for dispatch
                                  • ΔT – sampling time
                                  • A – state matrix
                                  • B – input matrix
                                  • c – vector
                                  • D – noise matrix

                                  Output

                                  Returns a vector containing the discretized input arguments A, B, c and D.

                                  Notes

                                  See discretize for more details.

                                  source
                                  _discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)

                                  Discretize the state matrix A with sampling time ΔT and discretization method algorithm.

                                  Input

                                  • A – state matrix
                                  • ΔT – sampling time
                                  • algorithm – (optional, default: :exact) discretization algorithm

                                  Output

                                  Returns a vector containing the discretized input argument A.

                                  Notes

                                  See discretize for more details.

                                  source
                                  _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                                  +            A::AbstractMatrix, B::AbstractMatrix)

                                  Discretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.

                                  Input

                                  • algorithm – discretization algorithm
                                  • ΔT – sampling time
                                  • A – state matrix
                                  • B – input or noise matrix

                                  Output

                                  Returns a vector containing the discretized input arguments A and B.

                                  Notes

                                  This method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).

                                  See discretize for more details.

                                  source
                                  _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                                  +            A::AbstractMatrix,c::AbstractVector)

                                  Discretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.

                                  Input

                                  • algorithm – discretization algorithm
                                  • ΔT – sampling time
                                  • A – state matrix
                                  • c – vector

                                  Output

                                  Returns a vector containing the discretized input arguments A and c.

                                  Notes

                                  See discretize for more details.

                                  source
                                  _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                                  +            A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)

                                  Discretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.

                                  Input

                                  • algorithm – discretization algorithm
                                  • ΔT – sampling time
                                  • A – state matrix
                                  • B – input matrix
                                  • c – vector

                                  Output

                                  Returns a vector containing the discretized input arguments A, B and c.

                                  Notes

                                  See discretize for more details.

                                  source
                                  _discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,
                                  +            A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)

                                  Discretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.

                                  Input

                                  • algorithm – discretization algorithm
                                  • ΔT – sampling time
                                  • A – state matrix
                                  • B – input matrix
                                  • D – noise matrix

                                  Output

                                  Returns a vector containing the discretized input arguments A, B and D.

                                  Notes

                                  See discretize for more details.

                                  source
                                  MathematicalSystems.typenameMethod
                                  typename(system::AbstractSystem)

                                  Returns the base type of system without parameter information.

                                  Input

                                  • systemAbstractSystem

                                  Output

                                  The base type of system.

                                  source
                                  MathematicalSystems._complementary_typeMethod
                                  _complementary_type(system_type::Type{<:AbstractSystem})

                                  Return the complementary type of a system type system_type.

                                  Input

                                  • system_type – type of AbstractSystem

                                  Ouput

                                  Return complementary type of system_type.

                                  Notes

                                  There are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.

                                  To get the complementary type of system type, use _complementary_type(typename(system)).

                                  source
                                  diff --git a/v0.11.9/lib/types/index.html b/v0.11.9/lib/types/index.html new file mode 100644 index 00000000..62b4ed2f --- /dev/null +++ b/v0.11.9/lib/types/index.html @@ -0,0 +1,127 @@ + +Types · MathematicalSystems.jl

                                  Types

                                  This section describes systems types implemented in MathematicalSystems.jl.

                                  Abstract Systems

                                  Continuous Systems

                                  MathematicalSystems.ConstrainedContinuousIdentitySystemType
                                  ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                  Trivial identity continuous-time system with domain constraints of the form:

                                  \[ x(t)' = 0, \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                  Fields

                                  • statedim – number of state variables
                                  • X – state constraints
                                  source
                                  MathematicalSystems.ConstrainedAffineControlContinuousSystemType
                                  ConstrainedAffineControlContinuousSystem

                                  Continuous-time affine control system with domain constraints of the form:

                                  \[ x(t)' = A x(t) + B u(t) + c, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • c – affine term
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.ConstrainedLinearControlContinuousSystemType
                                  ConstrainedLinearControlContinuousSystem

                                  Continuous-time linear control system with domain constraints of the form:

                                  \[ x(t)' = A x(t) + B u(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.ConstrainedPolynomialContinuousSystemType
                                  ConstrainedPolynomialContinuousSystem

                                  Continuous-time polynomial system with domain constraints:

                                  \[ x(t)' = p(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                  Fields

                                  • p – polynomial vector field
                                  • X – constraint set
                                  • statedim – number of state variables
                                  source
                                  MathematicalSystems.BlackBoxContinuousSystemType
                                  BlackBoxContinuousSystem <: AbstractContinuousSystem

                                  Continuous-time system defined by a right-hand side of the form:

                                  \[ x(t)' = f(x(t)) \; \forall t.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  source
                                  MathematicalSystems.ConstrainedBlackBoxContinuousSystemType
                                  ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                                  Continuous-time system defined by a right-hand side with domain constraints of the form:

                                  \[ x(t)' = f(x(t)), \; x(t) ∈ \mathcal{X} \; \forall t.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • X – state constraints
                                  source
                                  MathematicalSystems.BlackBoxControlContinuousSystemType
                                  BlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                  Continuous-time control system defined by a right-hand side of the form:

                                  \[ x(t)' = f(x(t), u(t)) \; \forall t.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • inputdim – number of input variables
                                  source
                                  MathematicalSystems.ConstrainedBlackBoxControlContinuousSystemType
                                  ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                  Continuous-time control system defined by a right-hand side with domain constraints of the form:

                                  \[ x(t)' = f(x(t), u(t)), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • inputdim – number of input variables
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.NoisyConstrainedLinearContinuousSystemType
                                  NoisyConstrainedLinearContinuousSystem

                                  Continuous-time linear system with additive disturbance and domain constraints of the form:

                                  \[ x(t)' = A x(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                                  Fields

                                  • A – state matrix
                                  • D – noise matrix
                                  • X – state constraints
                                  • W – disturbance set
                                  source
                                  MathematicalSystems.NoisyConstrainedLinearControlContinuousSystemType
                                  NoisyConstrainedLinearControlContinuousSystem

                                  Continuous-time linear control system with additive disturbance and domain constraints of the form:

                                  \[ x(t)' = A x(t) + B u(t) + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • D – noise matrix
                                  • X – state constraints
                                  • U – input constraints
                                  • W – disturbance set
                                  source
                                  MathematicalSystems.NoisyAffineControlContinuousSystemType
                                  NoisyAffineControlContinuousSystem

                                  Continuous-time affine control system with additive disturbance of the form:

                                  \[ x(t)' = A x(t) + B u(t) + c + D w(t) \; \forall t.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • c – affine term
                                  • D – noise matrix
                                  source
                                  MathematicalSystems.NoisyConstrainedAffineControlContinuousSystemType
                                  NoisyConstrainedAffineControlContinuousSystem

                                  Continuous-time affine control system with additive disturbance and domain constraints of the form:

                                  \[ x(t)' = A x(t) + B u(t) + c + D w(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U}, \; w(t) ∈ \mathcal{W} \; \forall t.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • c – affine term
                                  • D – noise matrix
                                  • X – state constraints
                                  • U – input constraints
                                  • W – disturbance set
                                  source
                                  MathematicalSystems.NoisyBlackBoxControlContinuousSystemType
                                  NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                  Continuous-time disturbance-affected control system defined by a right-hand side of the form:

                                  \[ x(t)' = f(x(t), u(t), w(t)) \; \forall t.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • inputdim – number of input variables
                                  • noisedim – number of noise variables
                                  source
                                  MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystemType
                                  NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                  Continuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                                  \[ x(t)' = f(x(t), u(t), w(t)), \quad x(t) ∈ \mathcal{X}, \quad u(t) ∈ \mathcal{U}, \quad w(t) ∈ \mathcal{W} \quad \forall t.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • inputdim – number of input variables
                                  • noisedim – number of noise variables
                                  • X – state constraints
                                  • U – input constraints
                                  • W – disturbance set
                                  source
                                  MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystemType
                                  SecondOrderConstrainedAffineControlContinuousSystem

                                  Continuous-time second order constrained affine control system of the form:

                                  \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t) + d, \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                  Fields

                                  • M – mass matrix
                                  • C – viscosity matrix
                                  • K – stiffness matrix
                                  • B – input matrix
                                  • d – affine term
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystemType
                                  SecondOrderConstrainedLinearControlContinuousSystem

                                  Continuous-time second order constrained linear control system of the form:

                                  \[ Mx''(t) + Cx'(t) + Kx(t) = Bu(t), \; x(t) ∈ \mathcal{X}, \; u(t) ∈ \mathcal{U} \; \forall t.\]

                                  Fields

                                  • M – mass matrix
                                  • C – viscosity matrix
                                  • K – stiffness matrix
                                  • B – input matrix
                                  • X – state constraints
                                  • U – input constraints
                                  source

                                  Discrete Systems

                                  MathematicalSystems.ConstrainedDiscreteIdentitySystemType
                                  ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                  Trivial identity discrete-time system with domain constraints of the form:

                                  \[ x_{k+1} = x_k, \; x_k ∈ \mathcal{X} \; \forall k.\]

                                  Fields

                                  • statedim – number of state variables
                                  • X – state constraints
                                  source
                                  MathematicalSystems.ConstrainedAffineDiscreteSystemType
                                  ConstrainedAffineDiscreteSystem

                                  Discrete-time affine system with domain constraints of the form:

                                  \[ x_{k+1} = A x_k + c, \; x_k ∈ \mathcal{X} \; \forall k.\]

                                  Fields

                                  • A – state matrix
                                  • c – affine term
                                  • X – state constraints
                                  source
                                  MathematicalSystems.ConstrainedLinearControlDiscreteSystemType
                                  ConstrainedLinearControlDiscreteSystem

                                  Discrete-time linear control system with domain constraints of the form:

                                  \[ x_{k+1} = A x_k + B u_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.ConstrainedAffineControlDiscreteSystemType
                                  ConstrainedAffineControlDiscreteSystem

                                  Continuous-time affine control system with domain constraints of the form:

                                  \[ x_{k+1} = A x_k + B u_k + c, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • c – affine term
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.BlackBoxDiscreteSystemType
                                  BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                  Discrete-time system defined by a right-hand side of the form:

                                  \[ x_{k+1} = f(x_k) \; \forall k.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  source
                                  MathematicalSystems.ConstrainedBlackBoxDiscreteSystemType
                                  ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                  Discrete-time system defined by a right-hand side with domain constraints of the form:

                                  \[ x_{k+1} = f(x_k), \; x_k ∈ \mathcal{X} \; \forall k.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • X – state constraints
                                  source
                                  MathematicalSystems.BlackBoxControlDiscreteSystemType
                                  BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                  Discrete-time control system defined by a right-hand side of the form:

                                  \[ x_{k+1} = f(x_k, u_k) \; \forall k.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • inputdim – number of input variables
                                  source
                                  MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystemType
                                  ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                  Discrete-time control system defined by a right-hand side with domain constraints of the form:

                                  \[ x_{k+1} = f(x_k, u_k), \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • inputdim – number of input variables
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.NoisyConstrainedLinearDiscreteSystemType
                                  NoisyConstrainedLinearDiscreteSystem

                                  Discrete-time linear system with additive disturbance and domain constraints of the form:

                                  \[ x_{k+1} = A x_k + D w_k, \; x_k ∈ \mathcal{X}, \; w(t) ∈ \mathcal{W} \; \forall k.\]

                                  Fields

                                  • A – state matrix
                                  • D – noise matrix
                                  • X – state constraints
                                  • W – disturbance set
                                  source
                                  MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystemType
                                  NoisyConstrainedLinearControlDiscreteSystem

                                  Continuous-time linear control system with additive disturbance and domain constraints of the form:

                                  \[ x_{k+1} = A x_k + B u_k + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • D – noise matrix
                                  • X – state constraints
                                  • U – input constraints
                                  • W – disturbance set
                                  source
                                  MathematicalSystems.NoisyAffineControlDiscreteSystemType
                                  NoisyAffineControlDiscreteSystem

                                  Continuous-time affine control system with additive disturbance of the form:

                                  \[ x_{k+1} = A x_k + B u_k + c + D w_k \; \forall k.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • c – affine term
                                  • D – noise matrix
                                  source
                                  MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystemType
                                  NoisyConstrainedAffineControlDiscreteSystem

                                  Continuous-time affine control system with additive disturbance and domain constraints of the form:

                                  \[ x_{k+1} = A x_k + B u_k + c + D w_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U}, \; w_k ∈ \mathcal{W} \; \forall k.\]

                                  Fields

                                  • A – state matrix
                                  • B – input matrix
                                  • c – affine term
                                  • D – noise matrix
                                  • X – state constraints
                                  • U – input constraints
                                  • W – disturbance set
                                  source
                                  MathematicalSystems.NoisyBlackBoxControlDiscreteSystemType
                                  NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                  Discrete-time disturbance-affected control system defined by a right-hand side of the form:

                                  \[ x_{k+1} = f(x_k, u_k) \quad \forall k.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • inputdim – number of input variables
                                  • noisedim – number of noise variables
                                  source
                                  MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystemType
                                  NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                  Discrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:

                                  \[ x_{k+1} = f(x_k, u_k), \quad x_k ∈ \mathcal{X}, \quad u_k ∈ \mathcal{U}, \quad w_k ∈ \mathcal{W} \quad \forall k.\]

                                  Fields

                                  • f – function that holds the right-hand side
                                  • statedim – number of state variables
                                  • inputdim – number of input variables
                                  • noisedim – number of noise variables
                                  • X – state constraints
                                  • U – input constraints
                                  • W – disturbance set
                                  source
                                  MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystemType
                                  SecondOrderConstrainedAffineControlDiscreteSystem

                                  Discrete-time second order constrained affine control system of the form:

                                  \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k + d, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                  Fields

                                  • M – mass matrix
                                  • C – viscosity matrix
                                  • K – stiffness matrix
                                  • B – input matrix
                                  • d – affine term
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystemType
                                  SecondOrderConstrainedLinearControlDiscreteSystem

                                  Discrete-time second order constrained linear control system of the form:

                                  \[ Mx_{k+2} + Cx_{k+1} + Kx_k = Bu_k, \; x_k ∈ \mathcal{X}, \; u_k ∈ \mathcal{U} \; \forall k.\]

                                  Fields

                                  • M – mass matrix
                                  • C – viscosity matrix
                                  • K – stiffness matrix
                                  • B – input matrix
                                  • X – state constraints
                                  • U – input constraints
                                  source

                                  Discretization Algorithms

                                  MathematicalSystems.AbstractDiscretizationAlgorithmType
                                  AbstractDiscretizationAlgorithm

                                  Abstract supertype for all discretization algorithms.

                                  Note

                                  For implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method

                                  _discretize(::NewDiscretizationAlgorithm, ΔT::Real,
                                  +             A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)

                                  are required.

                                  source
                                  MathematicalSystems.ExactDiscretizationType
                                  ExactDiscretization <: AbstractDiscretizationAlgorithm

                                  Exact discretization algorithm for affine systems.

                                  Algorithm

                                  This algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                                  Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                                  The exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = \exp^{A ~ ΔT}$, $B^d = A^{-1}(A^d - I)B$, $c^d = A^{-1}(A^d - I)c$ and $D^d = A^{-1}(A^d - I)D$.

                                  The algorithm described above is a well known result from the literature [1].

                                  [1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models

                                  source
                                  MathematicalSystems.EulerDiscretizationType
                                  EulerDiscretization <: AbstractDiscretizationAlgorithm

                                  Euler discretization algorithm for affine systems.

                                  Algorithm

                                  This algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.

                                  Without loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics $x' = Ax + Bu + c + Dw$.

                                  The Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as $x^+ = A^d x + B^d u + c^d + D^d w$ where $A^d = I + ΔT ~ A$, $B^d = ΔT ~ B$, $c^d = ΔT ~ c$ and $D^d = ΔT ~ D$.

                                  The algorithm described above is a well known result from the literature [1].

                                  [1] https://en.wikipedia.org/wiki/Discretization#Approximations

                                  source

                                  System macro

                                  MathematicalSystems.@systemMacro
                                  system(expr...)

                                  Return an instance of the system type corresponding to the given expressions.

                                  Input

                                  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                                  Output

                                  A system that best matches the given expressions.

                                  Notes

                                  Terms. The expression expr contains one or more of the following sub-expressions:

                                  • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                                  • set constraints, e.g. x ∈ X
                                  • input constraints, e.g. u ∈ U
                                  • dimensionality, e.g. dim: (2,1) or dim = 1
                                  • specification of the input variable, e.g. input: u or input = u
                                  • specification of the noise variable, e,g, noise: w or noise = w

                                  The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                                  @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                                  The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                                  Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                                  Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                                  Exceptions. The following exceptions and particular cases apply:

                                  • If the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                                  • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                                  • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                                  Examples

                                  Let us first create a continuous linear system using this macro:

                                  julia> A = [1. 0; 0 1.];
                                  +
                                  +julia> @system(x' = A*x)
                                  +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                                  A discrete system is defined by using :

                                  julia> @system(x⁺ = A*x)
                                  +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                                  Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                                  julia> using LazySets
                                  +
                                  +julia> B = Matrix([1. 0.5]');
                                  +
                                  +julia> c = [1., 1.5];
                                  +
                                  +julia> X = BallInf(zeros(2), 10.);
                                  +
                                  +julia> U = BallInf(zeros(1), 2.);
                                  +
                                  +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                                  +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))

                                  For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                                  julia> f(x, u) = x + u;
                                  +
                                  +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                                  +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))
                                  source

                                  Initial-value problem macro

                                  MathematicalSystems.@ivpMacro
                                  ivp(expr...)

                                  Return an instance of the initial-value problem type corresponding to the given expressions.

                                  Input

                                  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)

                                  Output

                                  An initial-value problem that best matches the given expressions.

                                  Notes

                                  This macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.

                                  The macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).

                                  Examples

                                  julia> p = @ivp(x' = -x, x(0) ∈ [1.0]);
                                  +
                                  +julia> typeof(p)
                                  +InitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}
                                  +
                                  +julia> initial_state(p)
                                  +1-element Array{Float64,1}:
                                  + 1.0
                                  +
                                  +julia> sys = @system(x' = [1 0; 0 1] * x);
                                  +
                                  +julia> @ivp(sys, x(0) ∈ [-1, 1])
                                  +InitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])
                                  source

                                  Identity operator

                                  MathematicalSystems.IdentityMultipleType
                                  IdentityMultiple{T} < AbstractMatrix{T} where T

                                  A scalar multiple of the identity matrix of given order and numeric type.

                                  Fields

                                  • M – uniform scaling operator of type T
                                  • n – size of the identity matrix

                                  Notes

                                  This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                                  Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                                  The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                                  Examples

                                  The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                                  julia> using MathematicalSystems: IdentityMultiple
                                  +
                                  +julia> I2 = I(2)
                                  +IdentityMultiple{Float64} of value 1.0 and order 2
                                  +
                                  +julia> I2 + I2
                                  +IdentityMultiple{Float64} of value 2.0 and order 2
                                  +
                                  +julia> 4*I2
                                  +IdentityMultiple{Float64} of value 4.0 and order 2

                                  The numeric type (default Float64) can be passed as a second argument:

                                  julia> I2r = I(2, Rational{Int})
                                  +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                                  +
                                  +julia> I2r + I2r
                                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                  +
                                  +julia> 4*I2r
                                  +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                                  To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:

                                  julia> I2 = I(2.0, 2)
                                  +IdentityMultiple{Float64} of value 2.0 and order 2
                                  +
                                  +julia> I2r = I(2//1, 2)
                                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                                  Or use the constructor passing the UniformScaling (I):

                                  julia> I2 = IdentityMultiple(2.0*I, 2)
                                  +IdentityMultiple{Float64} of value 2.0 and order 2
                                  +
                                  +julia> I2r = IdentityMultiple(2//1*I, 2)
                                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                  source

                                  Initial Value Problems

                                  MathematicalSystems.InitialValueProblemType
                                  InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem

                                  Parametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type

                                  Fields

                                  • s – system
                                  • x0 – initial state

                                  Examples

                                  The linear system $x' = -x$ with initial condition $x₀ = [-1/2, 1/2]$:

                                  julia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);
                                  +
                                  +julia> x₀ = [-1/2, 1/2];
                                  +
                                  +julia> p = InitialValueProblem(s, x₀);
                                  +
                                  +julia> initial_state(p) # same as p.x0
                                  +2-element Array{Float64,1}:
                                  + -0.5
                                  +  0.5
                                  +
                                  +julia> statedim(p)
                                  +2
                                  +
                                  +julia> inputdim(p)
                                  +0
                                  source
                                  MathematicalSystems.initial_stateFunction
                                  initial_state(ivp::InitialValueProblem)

                                  Return the initial state of an initial-value problem.

                                  Input

                                  • ivp – initial-value problem

                                  Output

                                  The initial state of an initial-value problem.

                                  source
                                  MathematicalSystems.systemFunction
                                  system(ivp::InitialValueProblem)

                                  Return the system wrapped by an initial-value problem.

                                  Input

                                  • ivp – initial-value problem

                                  Output

                                  The system of the given initial-value problem.

                                  source

                                  Input Types

                                  MathematicalSystems.AbstractInputType
                                  AbstractInput

                                  Abstract supertype for all input types.

                                  Notes

                                  The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                  Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                  A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                  source
                                  MathematicalSystems.ConstantInputType
                                  ConstantInput{UT} <: AbstractInput

                                  Type representing an input that remains constant in time.

                                  Fields

                                  • U – input set

                                  Examples

                                  The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                  julia> c = ConstantInput(-1//2)
                                  +ConstantInput{Rational{Int64}}(-1//2)
                                  +
                                  +julia> iterate(c, 1)
                                  +(-1//2, nothing)
                                  +
                                  +julia> iterate(c, 2)
                                  +(-1//2, nothing)
                                  +
                                  +julia> collect(nextinput(c, 4))
                                  +4-element Array{Rational{Int64},1}:
                                  + -1//2
                                  + -1//2
                                  + -1//2
                                  + -1//2

                                  The elements of this input are rational numbers:

                                  julia> eltype(c)
                                  +Rational{Int64}

                                  To transform a constant input, you can use map as in:

                                  julia> map(x->2*x, c)
                                  +ConstantInput{Rational{Int64}}(-1//1)
                                  source
                                  MathematicalSystems.VaryingInputType
                                  VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                                  Type representing an input that may vary with time.

                                  Fields

                                  • U – vector of input sets

                                  Examples

                                  The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                  julia> v = VaryingInput([-1//2, 1//2])
                                  +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                                  +
                                  +julia> length(v)
                                  +2
                                  +
                                  +julia> eltype(v)
                                  +Rational{Int64}

                                  Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                  julia> iterate(v, 1)
                                  +(-1//2, 2)
                                  +
                                  +julia> iterate(v, 2)
                                  +(1//2, 3)

                                  The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                  julia> typeof(nextinput(v))
                                  +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                                  +
                                  +julia> collect(nextinput(v, 1))
                                  +1-element Array{Rational{Int64},1}:
                                  + -1//2
                                  +
                                  +julia> collect(nextinput(v, 2))
                                  +2-element Array{Rational{Int64},1}:
                                  + -1//2
                                  +  1//2

                                  You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                  julia> collect(v)
                                  +2-element Array{Rational{Int64},1}:
                                  + -1//2
                                  +  1//2
                                  +
                                  +julia> [2*vi for vi in v]
                                  +2-element Array{Rational{Int64},1}:
                                  + -1//1
                                  +  1//1

                                  Since this input type is finite, querying more elements than its length returns the full vector:

                                  julia> collect(nextinput(v, 4))
                                  +2-element Array{Rational{Int64},1}:
                                  + -1//2
                                  +  1//2

                                  To transform a varying input, you can use map as in:

                                  julia> map(x->2*x, v)
                                  +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                                  source

                                  Maps

                                  MathematicalSystems.ConstrainedLinearControlMapType
                                  ConstrainedLinearControlMap

                                  A linear control map with state and input constraints,

                                  \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                  Fields

                                  • A – matrix
                                  • B – matrix
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.ConstrainedAffineControlMapType
                                  ConstrainedAffineControlMap

                                  An affine control map with state and input constraints,

                                  \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                  Fields

                                  • A – matrix
                                  • B – matrix
                                  • c – vector
                                  • X – state constraints
                                  • U – input constraints
                                  source
                                  MathematicalSystems.ResetMapType
                                  ResetMap

                                  A reset map,

                                  \[ x ↦ R(x),\]

                                  such that a subset of the variables is given a specified value, and the rest are unchanged.

                                  Fields

                                  • dim – dimension
                                  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                  source
                                  MathematicalSystems.ConstrainedResetMapType
                                  ConstrainedResetMap

                                  A reset map with state constraints of the form:

                                  \[ x ↦ R(x), x ∈ \mathcal{X},\]

                                  such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                                  Fields

                                  • dim – dimension
                                  • X – state constraints
                                  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                  source

                                  Macros

                                  MathematicalSystems.@mapMacro
                                  map(ex, args)

                                  Return an instance of the map type corresponding to the given expression.

                                  Input

                                  • ex – an expression defining the map, in the form of an anonymous function
                                  • args – additional optional arguments

                                  Output

                                  A map that best matches the given expression.

                                  Examples

                                  Let us first create a linear map using this macro:

                                  julia> @map x -> [1 0; 0 0]*x
                                  +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                                  We can create an affine system as well:

                                  julia> @map x -> [1 0; 0 0]*x + [2, 0]
                                  +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                                  Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                                  julia> @map(x -> x, dim=5)
                                  +IdentityMap(5)

                                  A state constraint on such map can be specified passing the additional argument x ∈ X.

                                  An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                                  julia> @map x -> I(5)*x
                                  +IdentityMap(5)
                                  source

                                  Systems with output

                                  MathematicalSystems.SystemWithOutputType
                                  SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem

                                  Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                  Fields

                                  • s – system of type ST
                                  • outputmap – output map of type MT
                                  source
                                  MathematicalSystems.LinearTimeInvariantSystemFunction
                                  LinearTimeInvariantSystem(A, B, C, D)

                                  A linear time-invariant system with of the form

                                  \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                                  Input

                                  • A – matrix
                                  • B – matrix
                                  • C – matrix
                                  • D – matrix

                                  Output

                                  A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                  source
                                  LinearTimeInvariantSystem(A, B, C, D, X, U)

                                  A linear time-invariant system with state and input constraints of the form

                                  \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                                  where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                  Input

                                  • A – matrix
                                  • B – matrix
                                  • C – matrix
                                  • D – matrix
                                  • X – state constraints
                                  • U – input constraints

                                  Output

                                  A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                  source

                                  Vector Field

                                  MathematicalSystems.VectorFieldType
                                  VectorField{T<:Function}

                                  Type that computes the vector field of an AbstractContinuousSystem.

                                  Fields

                                  • field – function for calculating the vector field
                                  source
                                  diff --git a/v0.11.9/man/systems/index.html b/v0.11.9/man/systems/index.html new file mode 100644 index 00000000..3aae108e --- /dev/null +++ b/v0.11.9/man/systems/index.html @@ -0,0 +1,11 @@ + +System types overview · MathematicalSystems.jl

                                  System types overview

                                  Using the macro

                                  A convenient way to create a new system is with the @system macro. For example, the ODE $x'(t) = -2x(t)$ is simply x' = -2x, where $x'(t) := dx/dt$ is the derivative of state $x(t)$ with respect to "time":

                                  using MathematicalSystems
                                  +
                                  +@system(x' = -2x)
                                  LinearContinuousSystem{Float64,IdentityMultiple{Float64}}([-2.0])

                                  We can also add state constraints, say $x(t) ≥ 0.5$,

                                  using LazySets
                                  +
                                  +H = HalfSpace([-1.0], -0.5) # x >= 0.5
                                  +@system(x' = -2x, x ∈ H)
                                  ConstrainedLinearContinuousSystem{Float64,IdentityMultiple{Float64},LazySets.HalfSpace{Float64,Array{Float64,1}}}([-2.0], LazySets.HalfSpace{Float64,Array{Float64,1}}([-1.0], -0.5))

                                  Systems of ODEs can be defined using vector notation:

                                  A = [1.0 0.0; -1.0 -2.0]
                                  +B = Ball2(zeros(2), 1.0)
                                  +c = [0.0, 5.0]
                                  +@system(z' = A*z + c, z ∈ B)
                                  ConstrainedAffineContinuousSystem{Float64,Array{Float64,2},Array{Float64,1},LazySets.Ball2{Float64,Array{Float64,1}}}([1.0 0.0; -1.0 -2.0], [0.0, 5.0], LazySets.Ball2{Float64,Array{Float64,1}}([0.0, 0.0], 1.0))

                                  which defines the two-dimensional system $x' = y$, $y' = -x - 2y + 3$, with state constraints $z ∈ B = \{ \sqrt{x^2 + y^2} \leq 5\}$.

                                  Initial-value problems can be specified with the @ivp macro. For instance, we can attach an initial condition $z(0) = (0.2, 0.2])$ to the previous example:

                                  S0 = Singleton([0.2, 0.2])
                                  +@ivp(z' = A*z + c, z ∈ B, z(0) ∈ S0)
                                  InitialValueProblem{ConstrainedAffineContinuousSystem{Float64,Array{Float64,2},Array{Float64,1},LazySets.Ball2{Float64,Array{Float64,1}}},LazySets.Singleton{Float64,Array{Float64,1}}}(ConstrainedAffineContinuousSystem{Float64,Array{Float64,2},Array{Float64,1},LazySets.Ball2{Float64,Array{Float64,1}}}([1.0 0.0; -1.0 -2.0], [0.0, 5.0], LazySets.Ball2{Float64,Array{Float64,1}}([0.0, 0.0], 1.0)), LazySets.Singleton{Float64,Array{Float64,1}}([0.2, 0.2]))

                                  Inputs

                                  In the examples introduced so far, the macro has automatically created different system types given a defining equation, either in scalar or in vector form, and state constraints. It is possible to define systems with additive input terms or noise terms, with constraints on the state, inputs or combinations of these. Other specific classes of systems such as algebraic, polynomial or general nonlinear systems given by a standard Julia function are available as well (see the tables below).

                                  Some applications require distinguishing between controlled inputs and uncontrolled or noise inputs. In this library we make such distinction by noting field names with $u$ and $w$ for (controlled) inputs and noise respectively. Please note that some systems are structurally equivalent, for example CLCCS and NCLCS being $x' = Ax + Bu$ and $x' = Ax + Dw$ respectively; the difference lies in the resulting value of getter functions such as inputset and noiseset.

                                  Summary tables

                                  The following table summarizes the different system types in abbreviated form. The abbreviated names are included here only for reference and are not exported. See the Types section of this manual, or simply click on the system's name for details on each type.

                                  Please note that for each continuous system there is a corresponding discrete system, e.g. there is ConstrainedAffineContinuousSystem and ConstrainedAffineDiscreteSystem, etc. However in this table we only included continuous system types for brevity.

                                  AbbreviationSystem type
                                  CISContinuousIdentitySystem
                                  CCISConstrainedContinuousIdentitySystem
                                  LCSLinearContinuousSystem
                                  ACSAffineContinuousSystem
                                  LCCSLinearControlContinuousSystem
                                  ACCSAffineControlContinuousSystem
                                  CLCSConstrainedLinearContinuousSystem
                                  CACSConstrainedAffineContinuousSystem
                                  CACCSConstrainedAffineControlContinuousSystem
                                  CLCCSConstrainedLinearControlContinuousSystem
                                  LACSLinearAlgebraicContinuousSystem
                                  CLACSConstrainedLinearAlgebraicContinuousSystem
                                  PCSPolynomialContinuousSystem
                                  CPCSPolynomialContinuousSystem
                                  BBCSBlackBoxContinuousSystem
                                  CBBCSConstrainedBlackBoxContinuousSystem
                                  BBCCSBlackBoxControlContinuousSystem
                                  CBBCCSConstrainedBlackBoxControlContinuousSystem
                                  NLCSNoisyLinearContinuousSystem
                                  NCLCSNoisyConstrainedLinearContinuousSystem
                                  NLCCSNoisyLinearControlContinuousSystem
                                  NCLCCSNoisyConstrainedLinearControlContinuousSystem
                                  NACCSNoisyAffineControlContinuousSystem
                                  NCALCCSNoisyConstrainedAffineControlContinuousSystem
                                  NBBCCSNoisyBlackBoxControlContinuousSystem
                                  NCBBCCSNoisyConstrainedBlackBoxControlContinuousSystem
                                  SOLCSSecondOrderLinearContinuousSystem
                                  SOACSSecondOrderAffineContinuousSystem
                                  SOCACCSSecondOrderConstrainedAffineControlContinuousSystem
                                  SOCLCCSSecondOrderConstrainedLinearControlContinuousSystem

                                  The following table summarizes the equation represented by each system type (the names are given in abbreviated form). Again, discrete systems are not included. The column Input constraints is yes if the structure can model input or noise constraints (or both).

                                  EquationState constraintsInput constraintsSystem type (abbr.)
                                  $x' = 0$nonoCIS
                                  $x' = 0, x ∈ X$yesnoCCIS
                                  $x' = Ax$nonoLCS
                                  $x' = Ax + c$nonoACS
                                  $x' = Ax + Bu$nonoLCCS
                                  $x' = Ax + Bu + c$nonoACCS
                                  $x' = Ax, x ∈ X$yesnoCLCS
                                  $x' = Ax + c, x ∈ X$yesnoCACS
                                  $x' = Ax + Bu + c, x ∈ X, u ∈ U$yesyesCACCS
                                  $x' = Ax + Bu, x ∈ X, u ∈ U$yesyesCLCCS
                                  $Ex' = Ax$nonoLACS
                                  $Ex' = Ax, x ∈ X$yesnoCLACS
                                  $x' = p(x)$nonoPCS
                                  $x' = p(x), x ∈ X$yesnoCPCS
                                  $x' = f(x)$nonoBBCS
                                  $x' = f(x), x ∈ X$yesnoCBBCS
                                  $x' = f(x, u)$nonoBBCCS
                                  $x' = f(x, u), x ∈ X, u ∈ U$yesyesCBBCCS
                                  $x' = Ax + Dw$nonoNLCS
                                  $x' = Ax + Dw, x ∈ X, w ∈ W$yesyesNCLCS
                                  $x' = Ax + Bu + Dw$nonoNLCCS
                                  $x' = Ax + Bu + Dw, x ∈ X, u ∈ U, w ∈ W$yesyesNCLCCS
                                  $x' = Ax + Bu + c + Dw$nonoNACCS
                                  $x' = Ax + Bu + c + Dw, x ∈ X, u ∈ U, w ∈ W$yesyesNCALCCS
                                  $x' = f(x, u, w)$nonoNBBCCS
                                  $x' = f(x, u, w), x ∈ X, u ∈ U, w ∈ W$yesyesNCBBCCS
                                  $Mx'' + Cx' + Kx = 0$nonoSOLCS
                                  $Mx'' + Cx' + Kx = b$nonoSOACS
                                  $Mx'' + Cx' + Kx = Bu + d, x ∈ X, u ∈ U$yesyesSOCACCS
                                  $Mx'' + Cx' + Kx = Bu, x ∈ X, u ∈ U$yesyesSOCLCCS
                                  diff --git a/v0.11.9/search/index.html b/v0.11.9/search/index.html new file mode 100644 index 00000000..1e33455a --- /dev/null +++ b/v0.11.9/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                  Loading search...

                                    diff --git a/v0.11.9/search_index.js b/v0.11.9/search_index.js new file mode 100644 index 00000000..353bb037 --- /dev/null +++ b/v0.11.9/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nextract_dyn_equation_parameters\nadd_asterisk\nsort","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_dyn_equation_parameters","page":"Internals","title":"MathematicalSystems.extract_dyn_equation_parameters","text":"extract_dyn_equation_parameters(equation, state, input, noise, dim, AT)\n\nExtract the value and field parameter from the dynamic equation equation according to the variable state, input and noise.\n\nFor the right-hand side of the dynamic equation, this function returns a vector of tuples containing some elements from the list\n\n(:A_user, :A)\n(:B_user, :B)\n(:c_user, :c)\n(:D_user, :D)\n(:f_user, :f)\n(:statedim_user :statedim)\n(:inputdim_user :inputdim)\n(:noisedim_user :noisedim)\n\nand for the left-hand side, it returns either an empty vector Any[] or [(:E_user, :E)] where the first argument of the tuple corresponds to the value and the second argument of the tuple corresponds to the field parameter.\n\nInput\n\nequation – dynamic equation\nstate – state variable\ninput – input variable\nnoise – noise variable\ndim – dimensionality\nAT – abstract system type\n\nOutput\n\nTwo arrays of tuples containing the value and field parameters for the right-hand and left-hand side of the dynamic equation equation.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Base.sort","page":"Internals","title":"Base.sort","text":"sort(parameters::Vector, order::Tuple)\n\nFilter and sort the vector parameters according to order.\n\nInput\n\nparameters – vector of tuples\norder – tuple of symbols\n\nOutput\n\nA new vector of tuples corresponding to parameters filtered and sorted according to order.\n\nExamples\n\njulia> parameters= [(:U1, :U), (:X1, :X), (:W1, :W)];\n\njulia> sort(parameters, (:X, :U, :W))\n3-element Array{Tuple{Any,Symbol},1}:\n (:X1, :X)\n (:U1, :U)\n (:W1, :W)\n\njulia> parameters = [(:const, :c), (:A, :A)];\n\njulia> sort(parameters, (:A, :B, :c, :D))\n2-element Array{Tuple{Any,Symbol},1}:\n (:A, :A)\n (:const, :c)\n\nNotes\n\nparameters is a vector that contains tuples whose second element is considered for the sorting according to order.\n\nIf a value of order is not contained in parameters, the corresponding entry of order will be omitted.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(vcat(c)), :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:(hcat(A1)), :A)\n (:(hcat(B1)), :B)\n (:(hcat(B2)), :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Evaluation-of-AbstractSystem-at-given-state","page":"Internals","title":"Evaluation of AbstractSystem at given state","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"_instantiate","category":"page"},{"location":"lib/internals/#MathematicalSystems._instantiate","page":"Internals","title":"MathematicalSystems._instantiate","text":"_instantiate(system::AbstractSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying one input.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n_instantiate(system::AbstractSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the result of instantiating an AbstractSystem at the current state and applying two inputs to an AbstractSystem.\n\nInput\n\nsystem – AbstractSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\nNotes\n\nThe _instantiate method generalizes the successor of an AbstractDiscreteSystem and the vector_field of an AbstractContinuousSystem into a single method.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Naming-convention-for-systems'-fields","page":"Internals","title":"Naming convention for systems' fields","text":"","category":"section"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Systems' fields should be accessed externally by their respective getter functions. Internally to the library, the following naming conventions are used.","category":"page"},{"location":"lib/internals/","page":"Internals","title":"Internals","text":"Field Description Getter function\nA state matrix state_matrix\nB input matrix input_matrix\nc affine term affine_term\nD noise matrix noise_matrix\nX state constraints stateset\nU input constraints inputset\nW disturbance set noiseset","category":"page"},{"location":"about/#About","page":"About","title":"About","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling\nUeli Wechsler","category":"page"},{"location":"man/systems/#System-types-overview","page":"System types overview","title":"System types overview","text":"","category":"section"},{"location":"man/systems/#Using-the-macro","page":"System types overview","title":"Using the macro","text":"","category":"section"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"A convenient way to create a new system is with the @system macro. For example, the ODE x(t) = -2x(t) is simply x' = -2x, where x(t) = dxdt is the derivative of state x(t) with respect to \"time\":","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"using MathematicalSystems\n\n@system(x' = -2x)","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"We can also add state constraints, say x(t) 05,","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"using LazySets\n\nH = HalfSpace([-1.0], -0.5) # x >= 0.5\n@system(x' = -2x, x ∈ H)","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"Systems of ODEs can be defined using vector notation:","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"A = [1.0 0.0; -1.0 -2.0]\nB = Ball2(zeros(2), 1.0)\nc = [0.0, 5.0]\n@system(z' = A*z + c, z ∈ B)","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"which defines the two-dimensional system x = y, y = -x - 2y + 3, with state constraints z B = sqrtx^2 + y^2 leq 5.","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"Initial-value problems can be specified with the @ivp macro. For instance, we can attach an initial condition z(0) = (02 02) to the previous example:","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"S0 = Singleton([0.2, 0.2])\n@ivp(z' = A*z + c, z ∈ B, z(0) ∈ S0)","category":"page"},{"location":"man/systems/#Inputs","page":"System types overview","title":"Inputs","text":"","category":"section"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"In the examples introduced so far, the macro has automatically created different system types given a defining equation, either in scalar or in vector form, and state constraints. It is possible to define systems with additive input terms or noise terms, with constraints on the state, inputs or combinations of these. Other specific classes of systems such as algebraic, polynomial or general nonlinear systems given by a standard Julia function are available as well (see the tables below).","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"Some applications require distinguishing between controlled inputs and uncontrolled or noise inputs. In this library we make such distinction by noting field names with u and w for (controlled) inputs and noise respectively. Please note that some systems are structurally equivalent, for example CLCCS and NCLCS being x = Ax + Bu and x = Ax + Dw respectively; the difference lies in the resulting value of getter functions such as inputset and noiseset.","category":"page"},{"location":"man/systems/#Summary-tables","page":"System types overview","title":"Summary tables","text":"","category":"section"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"The following table summarizes the different system types in abbreviated form. The abbreviated names are included here only for reference and are not exported. See the Types section of this manual, or simply click on the system's name for details on each type.","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"Please note that for each continuous system there is a corresponding discrete system, e.g. there is ConstrainedAffineContinuousSystem and ConstrainedAffineDiscreteSystem, etc. However in this table we only included continuous system types for brevity.","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"Abbreviation System type\nCIS ContinuousIdentitySystem\nCCIS ConstrainedContinuousIdentitySystem\nLCS LinearContinuousSystem\nACS AffineContinuousSystem\nLCCS LinearControlContinuousSystem\nACCS AffineControlContinuousSystem\nCLCS ConstrainedLinearContinuousSystem\nCACS ConstrainedAffineContinuousSystem\nCACCS ConstrainedAffineControlContinuousSystem\nCLCCS ConstrainedLinearControlContinuousSystem\nLACS LinearAlgebraicContinuousSystem\nCLACS ConstrainedLinearAlgebraicContinuousSystem\nPCS PolynomialContinuousSystem\nCPCS PolynomialContinuousSystem\nBBCS BlackBoxContinuousSystem\nCBBCS ConstrainedBlackBoxContinuousSystem\nBBCCS BlackBoxControlContinuousSystem\nCBBCCS ConstrainedBlackBoxControlContinuousSystem\nNLCS NoisyLinearContinuousSystem\nNCLCS NoisyConstrainedLinearContinuousSystem\nNLCCS NoisyLinearControlContinuousSystem\nNCLCCS NoisyConstrainedLinearControlContinuousSystem\nNACCS NoisyAffineControlContinuousSystem\nNCALCCS NoisyConstrainedAffineControlContinuousSystem\nNBBCCS NoisyBlackBoxControlContinuousSystem\nNCBBCCS NoisyConstrainedBlackBoxControlContinuousSystem\nSOLCS SecondOrderLinearContinuousSystem\nSOACS SecondOrderAffineContinuousSystem\nSOCACCS SecondOrderConstrainedAffineControlContinuousSystem\nSOCLCCS SecondOrderConstrainedLinearControlContinuousSystem","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"The following table summarizes the equation represented by each system type (the names are given in abbreviated form). Again, discrete systems are not included. The column Input constraints is yes if the structure can model input or noise constraints (or both).","category":"page"},{"location":"man/systems/","page":"System types overview","title":"System types overview","text":"Equation State constraints Input constraints System type (abbr.)\nx = 0 no no CIS\nx = 0 x X yes no CCIS\nx = Ax no no LCS\nx = Ax + c no no ACS\nx = Ax + Bu no no LCCS\nx = Ax + Bu + c no no ACCS\nx = Ax x X yes no CLCS\nx = Ax + c x X yes no CACS\nx = Ax + Bu + c x X u U yes yes CACCS\nx = Ax + Bu x X u U yes yes CLCCS\nEx = Ax no no LACS\nEx = Ax x X yes no CLACS\nx = p(x) no no PCS\nx = p(x) x X yes no CPCS\nx = f(x) no no BBCS\nx = f(x) x X yes no CBBCS\nx = f(x u) no no BBCCS\nx = f(x u) x X u U yes yes CBBCCS\nx = Ax + Dw no no NLCS\nx = Ax + Dw x X w W yes yes NCLCS\nx = Ax + Bu + Dw no no NLCCS\nx = Ax + Bu + Dw x X u U w W yes yes NCLCCS\nx = Ax + Bu + c + Dw no no NACCS\nx = Ax + Bu + c + Dw x X u U w W yes yes NCALCCS\nx = f(x u w) no no NBBCCS\nx = f(x u w) x X u U w W yes yes NCBBCCS\nMx + Cx + Kx = 0 no no SOLCS\nMx + Cx + Kx = b no no SOACS\nMx + Cx + Kx = Bu + d x X u U yes yes SOCACCS\nMx + Cx + Kx = Bu x X u U yes yes SOCLCCS","category":"page"},{"location":"lib/types/#Types","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nAffineControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nBlackBoxControlContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyLinearContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyLinearControlContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyAffineControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyBlackBoxControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem\nSecondOrderLinearContinuousSystem\nSecondOrderAffineContinuousSystem\nSecondOrderConstrainedAffineControlContinuousSystem\nSecondOrderConstrainedLinearControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x(t) = 0 forall t\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with domain constraints of the form:\n\n x(t) = 0  x(t) mathcalX forall t\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x(t) = A x(t) + c forall t\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x(t) = A x(t) + B u(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.AffineControlContinuousSystem","text":"AffineControlContinuousSystem\n\nContinuous-time affine control system of the form:\n\n x(t) = A x(t) + B u(t) + c forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n x(t) = A x(t) x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with domain constraints of the form:\n\n x(t) = A x(t) + c x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with domain constraints of the form:\n\n x(t) = A x(t) + B u(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x(t) = A x(t) forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with domain constraints of the form:\n\n E x(t) = A x(t)  x(t) mathcalX forall t\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x(t) = p(x(t)) forall t\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with domain constraints:\n\n x(t) = p(x(t)) x(t) mathcalX forall t\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x(t) = f(x(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t)) x(t) mathcalX forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlContinuousSystem","text":"BlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearContinuousSystem","text":"NoisyLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance of the form:\n\n x(t) = A x(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + D w(t)  x(t) mathcalX w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlContinuousSystem","text":"NoisyLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlContinuousSystem","text":"NoisyAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t) forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x(t) = A x(t) + B u(t) + c + D w(t)  x(t) mathcalX  u(t) mathcalU  w(t) mathcalW forall t\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlContinuousSystem","text":"NoisyBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side of the form:\n\n x(t) = f(x(t) u(t) w(t)) forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x(t) = f(x(t) u(t) w(t)) quad x(t) mathcalX quad u(t) mathcalU quad w(t) mathcalW quad forall t\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearContinuousSystem","text":"SecondOrderLinearContinuousSystem\n\nContinuous-time second order linear system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = 0 forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineContinuousSystem","text":"SecondOrderAffineContinuousSystem\n\nContinuous-time second order affine system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = b forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlContinuousSystem","text":"SecondOrderConstrainedAffineControlContinuousSystem\n\nContinuous-time second order constrained affine control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t) + d  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlContinuousSystem","text":"SecondOrderConstrainedLinearControlContinuousSystem\n\nContinuous-time second order constrained linear control system of the form:\n\n Mx(t) + Cx(t) + Kx(t) = Bu(t)  x(t) mathcalX  u(t) mathcalU forall t\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nAffineControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nBlackBoxControlDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyLinearDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyLinearControlDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyAffineControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyBlackBoxControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem\nSecondOrderLinearDiscreteSystem\nSecondOrderAffineDiscreteSystem\nSecondOrderConstrainedAffineControlDiscreteSystem\nSecondOrderConstrainedLinearControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k forall k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with domain constraints of the form:\n\n x_k+1 = x_k  x_k mathcalX forall k\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c forall k\n\nFields\n\nA – state matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineControlDiscreteSystem","text":"AffineControlDiscreteSystem\n\nContinuous-time affine control system of the form:\n\n x_k+1 = A x_k + B u_k + c forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with domain constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX forall k\n\nFields\n\nA – state matrix\nc – affine term\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with domain constraints of the form:\n\n E x_k+1 = A x_k  x_k mathcalX forall k\n\nFields\n\nA – state matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) forall k\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with domain constraints:\n\n x_k+1 = p(x_k)  x_k mathcalX forall k\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxControlDiscreteSystem","text":"BlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearDiscreteSystem","text":"NoisyLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance of the form:\n\n x_k+1 = A x_k + D w_k forall k\n\nFields\n\nA – state matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + D w_k  x_k mathcalX w(t) mathcalW forall k\n\nFields\n\nA – state matrix\nD – noise matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyLinearControlDiscreteSystem","text":"NoisyLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time linear control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyAffineControlDiscreteSystem","text":"NoisyAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with additive disturbance and domain constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k  x_k mathcalX  u_k mathcalU  w_k mathcalW forall k\n\nFields\n\nA – state matrix\nB – input matrix\nc – affine term\nD – noise matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyBlackBoxControlDiscreteSystem","text":"NoisyBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k u_k) quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time disturbance-affected control system defined by a right-hand side with domain constraints of the form:\n\n x_k+1 = f(x_k u_k) quad x_k mathcalX quad u_k mathcalU quad w_k mathcalW quad forall k\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nnoisedim – number of noise variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderLinearDiscreteSystem","text":"SecondOrderLinearDiscreteSystem\n\nDiscrete-time second order linear system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = 0 forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderAffineDiscreteSystem","text":"SecondOrderAffineDiscreteSystem\n\nDiscrete-time second order affine system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = b forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nb – affine term\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedAffineControlDiscreteSystem","text":"SecondOrderConstrainedAffineControlDiscreteSystem\n\nDiscrete-time second order constrained affine control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k + d  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nd – affine term\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.SecondOrderConstrainedLinearControlDiscreteSystem","text":"SecondOrderConstrainedLinearControlDiscreteSystem\n\nDiscrete-time second order constrained linear control system of the form:\n\n Mx_k+2 + Cx_k+1 + Kx_k = Bu_k  x_k mathcalX  u_k mathcalU forall k\n\nFields\n\nM – mass matrix\nC – viscosity matrix\nK – stiffness matrix\nB – input matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discretization-Algorithms","page":"Types","title":"Discretization Algorithms","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractDiscretizationAlgorithm\nExactDiscretization\nEulerDiscretization","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractDiscretizationAlgorithm","page":"Types","title":"MathematicalSystems.AbstractDiscretizationAlgorithm","text":"AbstractDiscretizationAlgorithm\n\nAbstract supertype for all discretization algorithms.\n\nNote\n\nFor implementing a custom discretization algorithm, a type definition struct NewDiscretizationAlgorithm <: AbstractDiscretizationAlgorithm end and a _discretize method\n\n_discretize(::NewDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nare required.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ExactDiscretization","page":"Types","title":"MathematicalSystems.ExactDiscretization","text":"ExactDiscretization <: AbstractDiscretizationAlgorithm\n\nExact discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of integrating the continuous differential equation over a specified time interval to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw where the state matrix A is invertible, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe exact discretization is calculated by integrating on both sides of the continuous ODE over the time span [t, t + ΔT], for a fixed input u and fixed noise realization w at time t. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = exp^A ΔT, B^d = A^-1(A^d - I)B, c^d = A^-1(A^d - I)c and D^d = A^-1(A^d - I)D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Discretizationoflinearstatespace_models\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.EulerDiscretization","page":"Types","title":"MathematicalSystems.EulerDiscretization","text":"EulerDiscretization <: AbstractDiscretizationAlgorithm\n\nEuler discretization algorithm for affine systems.\n\nAlgorithm\n\nThis algorithm consists of a first-order approximation to obtain an associated difference equation. The algorithm applies to any system of the form x' = Ax + Bu + c + Dw, and other system types, e.g. linear systems x' = Ax which are included in the above formulation.\n\nWithout loss of generality, consider a NoisyAffineControlledContinuousSystem with system dynamics x = Ax + Bu + c + Dw.\n\nThe Euler discretization is calculated by taking the first-order approximation of the exact discretization ExactDiscretization. The resulting discretization writes as x^+ = A^d x + B^d u + c^d + D^d w where A^d = I + ΔT A, B^d = ΔT B, c^d = ΔT c and D^d = ΔT D.\n\nThe algorithm described above is a well known result from the literature [1].\n\n[1] https://en.wikipedia.org/wiki/Discretization#Approximations\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo, A*x + B*foo + c or f(x, foo), the equation is parsed as a controlled linear (affine) or controlled black-box system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1 and α is parsed as Float64; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64,Array{Float64,1}},BallInf{Float64,Array{Float64,1}}}(f, 2, 2, BallInf{Float64,Array{Float64,1}}([0.0, 0.0], 10.0), BallInf{Float64,Array{Float64,1}}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Initial-value-problem-macro","page":"Types","title":"Initial-value problem macro","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"@ivp","category":"page"},{"location":"lib/types/#MathematicalSystems.@ivp","page":"Types","title":"MathematicalSystems.@ivp","text":"ivp(expr...)\n\nReturn an instance of the initial-value problem type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system, and the set of initial states (required)\n\nOutput\n\nAn initial-value problem that best matches the given expressions.\n\nNotes\n\nThis macro behaves like the @system macro, the sole difference being that in @ivp the constraint on the set of initial states is mandatory. For the technical details we refer to the documentation of @system.\n\nThe macro can also be called with a system argument of type AbstractSystem in the form @ivp(system, state(0) ∈ initial_set).\n\nExamples\n\njulia> p = @ivp(x' = -x, x(0) ∈ [1.0]);\n\njulia> typeof(p)\nInitialValueProblem{LinearContinuousSystem{Float64,IdentityMultiple{Float64}},Array{Float64,1}}\n\njulia> initial_state(p)\n1-element Array{Float64,1}:\n 1.0\n\njulia> sys = @system(x' = [1 0; 0 1] * x);\n\njulia> @ivp(sys, x(0) ∈ [-1, 1])\nInitialValueProblem{LinearContinuousSystem{Int64,Array{Int64,2}},Array{Int64,1}}(LinearContinuousSystem{Int64,Array{Int64,2}}([1 0; 0 1]), [-1, 1])\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in:\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"InitialValueProblem\nIVP\ninitial_state\nsystem","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem{S <: AbstractSystem, XT} <: AbstractSystem\n\nParametric composite type for initial value problems. It is parameterized in the system's type and the initial state's type\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x₀ = -12 12:\n\njulia> s = LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]);\n\njulia> x₀ = [-1/2, 1/2];\n\njulia> p = InitialValueProblem(s, x₀);\n\njulia> initial_state(p) # same as p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.initial_state","page":"Types","title":"MathematicalSystems.initial_state","text":"initial_state(ivp::InitialValueProblem)\n\nReturn the initial state of an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe initial state of an initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.system","page":"Types","title":"MathematicalSystems.system","text":"system(ivp::InitialValueProblem)\n\nReturn the system wrapped by an initial-value problem.\n\nInput\n\nivp – initial-value problem\n\nOutput\n\nThe system of the given initial-value problem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Input-Types","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nA state constraint on such map can be specified passing the additional argument x ∈ X.\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap} <: AbstractSystem\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#Vector-Field","page":"Types","title":"Vector Field","text":"","category":"section"},{"location":"lib/types/","page":"Types","title":"Types","text":"VectorField","category":"page"},{"location":"lib/types/#MathematicalSystems.VectorField","page":"Types","title":"MathematicalSystems.VectorField","text":"VectorField{T<:Function}\n\nType that computes the vector field of an AbstractContinuousSystem.\n\nFields\n\nfield – function for calculating the vector field\n\n\n\n\n\n","category":"type"},{"location":"#MathematicalSystems.jl","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features","page":"Home","title":"Features","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Ecosystem","page":"Home","title":"Ecosystem","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The following packages use MathematicalSystems.jl:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Dionysos.jl – Optimal control of cyber-physical systems\nHybridSystems.jl – Hybrid Systems definitions in Julia\nReachabilityAnalysis.jl – Methods to compute sets of states reachable by dynamical systems\nSpaceExParser.jl – SpaceEx modeling language parser\nStructuralDynamicsODESolvers.jl – Numerical integration methods for structural dynamics problems\nSwitchOnSafety.jl – Computing controlled invariant sets of Hybrid Systems using Sum Of Squares Programming","category":"page"},{"location":"#Manual-Outline","page":"Home","title":"Manual Outline","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\n \"man/systems.md\"\n]\nDepth = 2","category":"page"},{"location":"#Library-Outline","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Noises","page":"Methods","title":"Noises","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"noisedim\nnoiseset","category":"page"},{"location":"lib/methods/#MathematicalSystems.noisedim","page":"Methods","title":"MathematicalSystems.noisedim","text":"noisedim(s::AbstractSystem)\n\nReturns the dimension of the noise space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.noiseset","page":"Methods","title":"MathematicalSystems.noiseset","text":"noiseset(s::AbstractSystem)\n\nReturns the set of allowed noises of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisblackbox(::AbstractSystem)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)\nstate_matrix(::AbstractSystem)\ninput_matrix(::AbstractSystem)\nnoise_matrix(::AbstractSystem)\naffine_term(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s). Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isblackbox-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isblackbox","text":"isblackbox(s::AbstractSystem)\n\nSpecifies if no specific structure is assumed for the dynamics of system s.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\nThe result of this function only depends on the system type, not the value, and can also be applied to typeof(s).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.state_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.state_matrix","text":"state_matrix(s::AbstractSystem)\n\nReturn the state matrix of an affine system.\n\nNotes\n\nThe state matrix is the matrix proportional to the state, e.g. the matrix A in the linear continuous system x = Ax.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.input_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.input_matrix","text":"input_matrix(s::AbstractSystem)\n\nReturn the input matrix of a system with linear input.\n\nNotes\n\nThe input matrix is the matrix proportional to the input, e.g. the matrix B in the linear continuous system with input, x = Ax + Bu.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.noise_matrix-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.noise_matrix","text":"noise_matrix(s::AbstractSystem)\n\nReturn the noise matrix of a system with linear noise.\n\nNotes\n\nThe noise matrix is the matrix proportional to the noise, e.g. the matrix D in the linear system with noise, x = Ax + Dw.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.affine_term-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.affine_term","text":"affine_term(s::AbstractSystem)\n\nReturn the affine term in an affine system.\n\nNotes\n\nThe affine term is e.g. the vector c in the affine system x = Ax + c.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x and input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nsuccessor(system::AbstractDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of an AbstractDiscreteSystem.\n\nInput\n\nsystem – AbstractDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to state x, input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Vector-Field","page":"Methods","title":"Vector Field","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"vector_field","category":"page"},{"location":"lib/methods/#MathematicalSystems.vector_field","page":"Methods","title":"MathematicalSystems.vector_field","text":"vector_field(system::ContinuousIdentitySystem, x::AbstractVector)\n\nReturn the vector field state of a ContinuousIdentitySystem.\n\nInput\n\nsystem – ContinuousIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::ConstrainedContinuousIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of a ConstrainedContinuousIdentitySystem.\n\nInput\n\nsystem – ConstrainedContinuousIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nA zeros vector of dimension statedim.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem, x::AbstractVector, u::AbstractVector;\n [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type) or noise, if system is not controlled\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u.\n\nNotes\n\nIf the system is not controlled but noisy, the input u is interpreted as noise.\n\n\n\n\n\nvector_field(system::AbstractContinuousSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the vector field state of an AbstractContinuousSystem.\n\nInput\n\nsystem – AbstractContinuousSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe vector field of the system at state x and applying input u and noise w.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Discretization","page":"Methods","title":"Discretization","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"discretize","category":"page"},{"location":"lib/methods/#MathematicalSystems.discretize","page":"Methods","title":"MathematicalSystems.discretize","text":"discretize(system::AbstractContinuousSystem, ΔT::Real,\n algorithm::AbstractDiscretizationAlgorithm=ExactDiscretization(),\n constructor=_default_complementary_constructor(system))\n\nDiscretization of a isaffine AbstractContinuousSystem to a AbstractDiscreteSystem with sampling time ΔT using the discretization method algorithm.\n\nInput\n\nsystem – an affine continuous system\nΔT – sampling time\nalgorithm – (optional, default: ExactDiscretization()) discretization algorithm\nconstructor – (optional, default: _default_complementary_constructor(system)) construction method\n\nOutput\n\nReturns a discretization of the input system system with discretization method algorithm and sampling time ΔT.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Internal-Methods","page":"Methods","title":"Internal Methods","text":"","category":"section"},{"location":"lib/methods/","page":"Methods","title":"Methods","text":"_discretize\ntypename(::AbstractSystem)\n_complementary_type(::Type{<:AbstractSystem})","category":"page"},{"location":"lib/methods/#MathematicalSystems._discretize","page":"Methods","title":"MathematicalSystems._discretize","text":"_discretize(::AbstractDiscretizationAlgorithm, ΔT::Real\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector, D::AbstractMatrix)\n\nImplementation of the discretization algorithm defined by the first input argument with sampling time ΔT.\n\nInput\n\n`` – discretization algorithm, used for dispatch\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B, c and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(A::AbstractMatrix, ΔT::Real; algorithm=:exact)\n\nDiscretize the state matrix A with sampling time ΔT and discretization method algorithm.\n\nInput\n\nA – state matrix\nΔT – sampling time\nalgorithm – (optional, default: :exact) discretization algorithm\n\nOutput\n\nReturns a vector containing the discretized input argument A.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix)\n\nDiscretize the state matrix A and input or noise matrix B with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input or noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A and B.\n\nNotes\n\nThis method signature with two arguments of type AbstractMatrix works both for a noisy system with fields (:A,:D) and a controlled system with fields (:A,:B).\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix,c::AbstractVector)\n\nDiscretize the state matrix A and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, c::AbstractVector)\n\nDiscretize the state matrix A, input matrix B and vector c with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nc – vector\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and c.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n_discretize(algorithm::AbstractDiscretizationAlgorithm, ΔT::Real,\n A::AbstractMatrix, B::AbstractMatrix, D::AbstractMatrix)\n\nDiscretize the state matrix A, input matrix B and noise matrix C with sampling time ΔT and discretization method algorithm.\n\nInput\n\nalgorithm – discretization algorithm\nΔT – sampling time\nA – state matrix\nB – input matrix\nD – noise matrix\n\nOutput\n\nReturns a vector containing the discretized input arguments A, B and D.\n\nNotes\n\nSee discretize for more details.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.typename-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.typename","text":"typename(system::AbstractSystem)\n\nReturns the base type of system without parameter information.\n\nInput\n\nsystem – AbstractSystem\n\nOutput\n\nThe base type of system.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems._complementary_type-Tuple{Type{var\"#s7\"} where var\"#s7\"<:AbstractSystem}","page":"Methods","title":"MathematicalSystems._complementary_type","text":"_complementary_type(system_type::Type{<:AbstractSystem})\n\nReturn the complementary type of a system type system_type.\n\nInput\n\nsystem_type – type of AbstractSystem\n\nOuput\n\nReturn complementary type of system_type.\n\nNotes\n\nThere are two main subclasses of abstract types: continuous types and discrete types. A complementary type of system_type has the same fields as system_type but belongs to the other subclass, e.g. for a LinearContinuousSystem which is a subtype of AbstractContinuousSystem and has the field :A, the subtype of AbstractDiscreteSystem with the field :A, i.e. LinearDiscreteSystem, is returned.\n\nTo get the complementary type of system type, use _complementary_type(typename(system)).\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.11.9/siteinfo.js b/v0.11.9/siteinfo.js new file mode 100644 index 00000000..9e8f8881 --- /dev/null +++ b/v0.11.9/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.11.9"; diff --git a/v0.2 b/v0.2 new file mode 120000 index 00000000..81fd7ba0 --- /dev/null +++ b/v0.2 @@ -0,0 +1 @@ +v0.2.0 \ No newline at end of file diff --git a/v0.2.0/about.html b/v0.2.0/about.html new file mode 100644 index 00000000..d4843f0d --- /dev/null +++ b/v0.2.0/about.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                    About

                                    About

                                    This page contains some general information about this project, and recommendations about contributing.

                                    Contributing

                                    If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                    Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                    Branches and pull requests (PR)

                                    We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                    Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                    Unit testing and continuous integration (CI)

                                    This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                    When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                    $ julia --color=yes test/runtests.jl

                                    Alternatively, you can achieve the same from inside the REPL using the following command:

                                    julia> Pkg.test("MathematicalSystems")

                                    We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                    Contributing to the documentation

                                    New functions and types should be documented according to our guidelines directly in the source code.

                                    You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                    julia> ?LinearContinuousSystem

                                    This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                    To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                    $ julia --color=yes docs/make.jl

                                    Note that this also runs all doctests which will take some time.

                                    Related projects

                                    This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                    Below we list more related projects.

                                    Package nameDescription
                                    HybridSystems.jlHybrid Systems definitions in Julia.
                                    LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                    ControlToolbox.jlAnalysis and design tools for control systems.
                                    ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                    DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                    ControlSystems.jlA Control Systems Toolbox for Julia
                                    ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                    Credits

                                    These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                    diff --git a/v0.2.0/assets/arrow.svg b/v0.2.0/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.2.0/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.2.0/assets/documenter.css b/v0.2.0/assets/documenter.css new file mode 100644 index 00000000..26c8166f --- /dev/null +++ b/v0.2.0/assets/documenter.css @@ -0,0 +1,573 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                    the is very first thing on the page (i.e. the second element + * in the
                                    , * after the
                                    , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                     surrounding the , while
                                    + * highlight.js applies the .hljs style directly to the  tag.
                                    + */
                                    +.hljs {
                                    +    background-color: transparent;
                                    +    padding: 0;
                                    +}
                                    +
                                    +@media only screen and (max-width: 768px) {
                                    +    nav.toc {
                                    +        position: fixed;
                                    +        overflow-y: scroll;
                                    +        width: 16em;
                                    +        left: -16em;
                                    +        -webkit-overflow-scrolling: touch;
                                    +        -webkit-transition-property: left; /* Safari */
                                    +        -webkit-transition-duration: 0.3s; /* Safari */
                                    +        transition-property: left;
                                    +        transition-duration: 0.3s;
                                    +        -webkit-transition-timing-function: ease-out; /* Safari */
                                    +        transition-timing-function: ease-out;
                                    +        z-index: 2;
                                    +    }
                                    +
                                    +    nav.toc.show {
                                    +        left: 0;
                                    +    }
                                    +
                                    +    article {
                                    +        margin-left: 0;
                                    +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                    +        overflow-wrap: break-word;
                                    +    }
                                    +
                                    +    article > header {
                                    +        position: fixed;
                                    +        left: 0;
                                    +        z-index: 1;
                                    +    }
                                    +
                                    +    article > header nav, hr {
                                    +        display: none;
                                    +    }
                                    +
                                    +    article > header div#topbar {
                                    +        display: block; /* is mobile */
                                    +        position: fixed;
                                    +        width: 100%;
                                    +        height: 1.5em;
                                    +        padding-top: 1em;
                                    +        padding-bottom: 1em;
                                    +        background-color: #fcfcfc;
                                    +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                    +        top: 0;
                                    +        -webkit-transition-property: top; /* Safari */
                                    +        -webkit-transition-duration: 0.3s; /* Safari */
                                    +        transition-property: top;
                                    +        transition-duration: 0.3s;
                                    +    }
                                    +
                                    +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                    +        top: -4em;
                                    +        -webkit-transition-property: top; /* Safari */
                                    +        -webkit-transition-duration: 0.7s; /* Safari */
                                    +        transition-property: top;
                                    +        transition-duration: 0.7s;
                                    +    }
                                    +
                                    +    article > header div#topbar span {
                                    +        position: fixed;
                                    +        width: 80%;
                                    +        height: 1.5em;
                                    +        margin-top: -0.1em;
                                    +        margin-left: 0.9em;
                                    +        font-size: 1.2em;
                                    +        overflow: hidden;
                                    +    }
                                    +
                                    +    article > header div#topbar a.fa-bars {
                                    +        float: right;
                                    +        padding: 0.6em;
                                    +        margin-top: -0.6em;
                                    +        margin-right: 0.3em;
                                    +        font-size: 1.5em;
                                    +    }
                                    +
                                    +    article > header div#topbar a.fa-bars:visited {
                                    +        color: #3091d1;
                                    +    }
                                    +
                                    +    article table {
                                    +        overflow-x: auto;
                                    +        display: block;
                                    +    }
                                    +
                                    +    article div.MathJax_Display {
                                    +        overflow: scroll;
                                    +    }
                                    +
                                    +    article span.MathJax {
                                    +        overflow: hidden;
                                    +    }
                                    +}
                                    +
                                    +@media only screen and (max-width: 320px) {
                                    +    body {
                                    +        font-size: 15px;
                                    +    }
                                    +}
                                    diff --git a/v0.2.0/assets/documenter.js b/v0.2.0/assets/documenter.js
                                    new file mode 100644
                                    index 00000000..5d31622f
                                    --- /dev/null
                                    +++ b/v0.2.0/assets/documenter.js
                                    @@ -0,0 +1,129 @@
                                    +/*
                                    + * Part of Documenter.jl
                                    + *     https://github.com/JuliaDocs/Documenter.jl
                                    + *
                                    + * License: MIT
                                    + */
                                    +
                                    +requirejs.config({
                                    +    paths: {
                                    +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                    +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                    +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                    +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                    +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                    +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                    +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                    +    },
                                    +    shim: {
                                    +        'mathjax' : {
                                    +            exports: "MathJax"
                                    +        },
                                    +        'highlight-julia': ['highlight'],
                                    +        'highlight-julia-repl': ['highlight'],
                                    +    }
                                    +});
                                    +
                                    +// Load MathJax
                                    +require(['mathjax'], function(MathJax) {
                                    +    MathJax.Hub.Config({
                                    +      "tex2jax": {
                                    +        inlineMath: [['$','$'], ['\\(','\\)']],
                                    +        processEscapes: true
                                    +      }
                                    +    });
                                    +    MathJax.Hub.Config({
                                    +      config: ["MMLorHTML.js"],
                                    +      jax: [
                                    +        "input/TeX",
                                    +        "output/HTML-CSS",
                                    +        "output/NativeMML"
                                    +      ],
                                    +      extensions: [
                                    +        "MathMenu.js",
                                    +        "MathZoom.js",
                                    +        "TeX/AMSmath.js",
                                    +        "TeX/AMSsymbols.js",
                                    +        "TeX/autobold.js",
                                    +        "TeX/autoload-all.js"
                                    +      ]
                                    +    });
                                    +    MathJax.Hub.Config({
                                    +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                    +    });
                                    +})
                                    +
                                    +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                    +    $(document).ready(function() {
                                    +        hljs.initHighlighting();
                                    +    })
                                    +
                                    +})
                                    +
                                    +// update the version selector with info from the siteinfo.js and ../versions.js files
                                    +require(['jquery'], function($) {
                                    +    $(document).ready(function() {
                                    +        var version_selector = $("#version-selector");
                                    +
                                    +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                    +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                    +            var option = $("");
                                    +            version_selector.append(option);
                                    +        }
                                    +
                                    +        if (typeof DOC_VERSIONS !== 'undefined') {
                                    +            var existing_versions = $('#version-selector > option');
                                    +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                    +            DOC_VERSIONS.forEach(function(each) {
                                    +                var version_url = documenterBaseURL + "/../" + each;
                                    +                var existing_id = $.inArray(each, existing_versions_texts);
                                    +                // if not already in the version selector, add it as a new option,
                                    +                // otherwise update the old option with the URL and enable it
                                    +                if (existing_id == -1) {
                                    +                    var option = $("");
                                    +                    version_selector.append(option);
                                    +                } else {
                                    +                    var option = existing_versions[existing_id];
                                    +                    option.value = version_url;
                                    +                    option.disabled = false;
                                    +                }
                                    +            });
                                    +        }
                                    +
                                    +        // only show the version selector if the selector has been populated
                                    +        if ($('#version-selector > option').length > 0) {
                                    +            version_selector.css("visibility", "visible");
                                    +        }
                                    +    })
                                    +
                                    +})
                                    +
                                    +// mobile
                                    +require(['jquery', 'headroom'], function($, Headroom) {
                                    +    $(document).ready(function() {
                                    +        var navtoc = $("nav.toc");
                                    +        $("nav.toc li.current a.toctext").click(function() {
                                    +            navtoc.toggleClass('show');
                                    +        });
                                    +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                    +            ev.preventDefault();
                                    +            navtoc.toggleClass('show');
                                    +            if (navtoc.hasClass('show')) {
                                    +                var title = $("article > header div#topbar span").text();
                                    +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                    +            }
                                    +        });
                                    +        $("article#docs").bind('click', function(ev) {
                                    +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                    +                return;
                                    +            }
                                    +            if (navtoc.hasClass('show')) {
                                    +                navtoc.removeClass('show');
                                    +            }
                                    +        });
                                    +        if ($("article > header div#topbar").css('display') == 'block') {
                                    +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                    +            headroom.init();
                                    +        }
                                    +    })
                                    +})
                                    diff --git a/v0.2.0/assets/juliareach.css b/v0.2.0/assets/juliareach.css
                                    new file mode 100644
                                    index 00000000..64b0d92d
                                    --- /dev/null
                                    +++ b/v0.2.0/assets/juliareach.css
                                    @@ -0,0 +1,583 @@
                                    +/*
                                    + * The default CSS style for Documenter.jl generated sites
                                    + *
                                    + * Heavily inspired by the Julia Sphinx theme
                                    + *     https://github.com/JuliaLang/JuliaDoc
                                    + * which extends the sphinx_rtd_theme
                                    + *     https://github.com/snide/sphinx_rtd_theme
                                    + *
                                    + * Part of Documenter.jl
                                    + *     https://github.com/JuliaDocs/Documenter.jl
                                    + *
                                    + * License: MIT
                                    + */
                                    +
                                    +/* The original CSS is modified such that it right-justifies the text. */
                                    +
                                    +/* fonts */
                                    +body, input {
                                    +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                    +  font-size: 16px;
                                    +  color: #222;
                                    +  text-rendering: optimizeLegibility;
                                    +}
                                    +
                                    +pre, code, kbd {
                                    +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                    +  font-size: 0.90em;
                                    +}
                                    +
                                    +pre code {
                                    +  font-size: 1em;
                                    +}
                                    +
                                    +a {
                                    +    color: #2980b9;
                                    +    text-decoration: none;
                                    +}
                                    +
                                    +a:hover {
                                    +    color: #3091d1;
                                    +}
                                    +
                                    +a:visited {
                                    +    color: #9b59b6;
                                    +}
                                    +
                                    +body {
                                    +    line-height: 1.5;
                                    +}
                                    +
                                    +h1 {
                                    +    font-size: 1.75em;
                                    +}
                                    +
                                    +/* Unless the 

                                    the is very first thing on the page (i.e. the second element + * in the
                                    , * after the
                                    , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                     surrounding the , while
                                    + * highlight.js applies the .hljs style directly to the  tag.
                                    + */
                                    +.hljs {
                                    +    background-color: transparent;
                                    +    padding: 0;
                                    +}
                                    +
                                    +@media only screen and (max-width: 768px) {
                                    +    nav.toc {
                                    +        position: fixed;
                                    +        overflow-y: scroll;
                                    +        width: 16em;
                                    +        left: -16em;
                                    +        -webkit-overflow-scrolling: touch;
                                    +        -webkit-transition-property: left; /* Safari */
                                    +        -webkit-transition-duration: 0.3s; /* Safari */
                                    +        transition-property: left;
                                    +        transition-duration: 0.3s;
                                    +        -webkit-transition-timing-function: ease-out; /* Safari */
                                    +        transition-timing-function: ease-out;
                                    +        z-index: 2;
                                    +    }
                                    +
                                    +    nav.toc.show {
                                    +        left: 0;
                                    +    }
                                    +
                                    +    article {
                                    +        margin-left: 0;
                                    +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                    +        overflow-wrap: break-word;
                                    +    }
                                    +
                                    +    article > header {
                                    +        position: fixed;
                                    +        left: 0;
                                    +        z-index: 1;
                                    +    }
                                    +
                                    +    article > header nav, hr {
                                    +        display: none;
                                    +    }
                                    +
                                    +    article > header div#topbar {
                                    +        display: block; /* is mobile */
                                    +        position: fixed;
                                    +        width: 100%;
                                    +        height: 1.5em;
                                    +        padding-top: 1em;
                                    +        padding-bottom: 1em;
                                    +        background-color: #fcfcfc;
                                    +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                    +        top: 0;
                                    +        -webkit-transition-property: top; /* Safari */
                                    +        -webkit-transition-duration: 0.3s; /* Safari */
                                    +        transition-property: top;
                                    +        transition-duration: 0.3s;
                                    +    }
                                    +
                                    +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                    +        top: -4em;
                                    +        -webkit-transition-property: top; /* Safari */
                                    +        -webkit-transition-duration: 0.7s; /* Safari */
                                    +        transition-property: top;
                                    +        transition-duration: 0.7s;
                                    +    }
                                    +
                                    +    article > header div#topbar span {
                                    +        position: fixed;
                                    +        width: 80%;
                                    +        height: 1.5em;
                                    +        margin-top: -0.1em;
                                    +        margin-left: 0.9em;
                                    +        font-size: 1.2em;
                                    +        overflow: hidden;
                                    +    }
                                    +
                                    +    article > header div#topbar a.fa-bars {
                                    +        float: right;
                                    +        padding: 0.6em;
                                    +        margin-top: -0.6em;
                                    +        margin-right: 0.3em;
                                    +        font-size: 1.5em;
                                    +    }
                                    +
                                    +    article > header div#topbar a.fa-bars:visited {
                                    +        color: #3091d1;
                                    +    }
                                    +
                                    +    article table {
                                    +        overflow-x: auto;
                                    +        display: block;
                                    +    }
                                    +
                                    +    article div.MathJax_Display {
                                    +        overflow: scroll;
                                    +    }
                                    +
                                    +    article span.MathJax {
                                    +        overflow: hidden;
                                    +    }
                                    +}
                                    +
                                    +@media only screen and (max-width: 320px) {
                                    +    body {
                                    +        font-size: 15px;
                                    +    }
                                    +}
                                    diff --git a/v0.2.0/assets/search.js b/v0.2.0/assets/search.js
                                    new file mode 100644
                                    index 00000000..f99b3786
                                    --- /dev/null
                                    +++ b/v0.2.0/assets/search.js
                                    @@ -0,0 +1,250 @@
                                    +/*
                                    + * Part of Documenter.jl
                                    + *     https://github.com/JuliaDocs/Documenter.jl
                                    + *
                                    + * License: MIT
                                    + */
                                    +
                                    +// parseUri 1.2.2
                                    +// (c) Steven Levithan 
                                    +// MIT License
                                    +function parseUri (str) {
                                    +	var	o   = parseUri.options,
                                    +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                    +		uri = {},
                                    +		i   = 14;
                                    +
                                    +	while (i--) uri[o.key[i]] = m[i] || "";
                                    +
                                    +	uri[o.q.name] = {};
                                    +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                    +		if ($1) uri[o.q.name][$1] = $2;
                                    +	});
                                    +
                                    +	return uri;
                                    +};
                                    +parseUri.options = {
                                    +	strictMode: false,
                                    +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                    +	q:   {
                                    +		name:   "queryKey",
                                    +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                    +	},
                                    +	parser: {
                                    +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                    +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                    +	}
                                    +};
                                    +
                                    +requirejs.config({
                                    +    paths: {
                                    +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                    +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.1/lunr.min',
                                    +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
                                    +    }
                                    +});
                                    +
                                    +var currentScript = document.currentScript;
                                    +
                                    +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                    +    $("#search-form").submit(function(e) {
                                    +        e.preventDefault()
                                    +    })
                                    +
                                    +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                    +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                    +    // ideally we'd just filter the original list but it's not available as a variable
                                    +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                    +        'a',
                                    +        'able',
                                    +        'about',
                                    +        'across',
                                    +        'after',
                                    +        'almost',
                                    +        'also',
                                    +        'am',
                                    +        'among',
                                    +        'an',
                                    +        'and',
                                    +        'are',
                                    +        'as',
                                    +        'at',
                                    +        'be',
                                    +        'because',
                                    +        'been',
                                    +        'but',
                                    +        'by',
                                    +        'can',
                                    +        'cannot',
                                    +        'could',
                                    +        'dear',
                                    +        'did',
                                    +        'does',
                                    +        'either',
                                    +        'ever',
                                    +        'every',
                                    +        'from',
                                    +        'got',
                                    +        'had',
                                    +        'has',
                                    +        'have',
                                    +        'he',
                                    +        'her',
                                    +        'hers',
                                    +        'him',
                                    +        'his',
                                    +        'how',
                                    +        'however',
                                    +        'i',
                                    +        'if',
                                    +        'into',
                                    +        'it',
                                    +        'its',
                                    +        'just',
                                    +        'least',
                                    +        'like',
                                    +        'likely',
                                    +        'may',
                                    +        'me',
                                    +        'might',
                                    +        'most',
                                    +        'must',
                                    +        'my',
                                    +        'neither',
                                    +        'no',
                                    +        'nor',
                                    +        'not',
                                    +        'of',
                                    +        'off',
                                    +        'often',
                                    +        'on',
                                    +        'only',
                                    +        'or',
                                    +        'other',
                                    +        'our',
                                    +        'own',
                                    +        'rather',
                                    +        'said',
                                    +        'say',
                                    +        'says',
                                    +        'she',
                                    +        'should',
                                    +        'since',
                                    +        'so',
                                    +        'some',
                                    +        'than',
                                    +        'that',
                                    +        'the',
                                    +        'their',
                                    +        'them',
                                    +        'then',
                                    +        'there',
                                    +        'these',
                                    +        'they',
                                    +        'this',
                                    +        'tis',
                                    +        'to',
                                    +        'too',
                                    +        'twas',
                                    +        'us',
                                    +        'wants',
                                    +        'was',
                                    +        'we',
                                    +        'were',
                                    +        'what',
                                    +        'when',
                                    +        'who',
                                    +        'whom',
                                    +        'why',
                                    +        'will',
                                    +        'would',
                                    +        'yet',
                                    +        'you',
                                    +        'your'
                                    +        ])
                                    +
                                    +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                    +    // would not find anything if searching for "add!", only for the entire qualification
                                    +    lunr.tokenizer.separator = /[\s\-\.]+/
                                    +
                                    +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                    +    lunr.trimmer = function (token) {
                                    +        return token.update(function (s) {
                                    +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                    +        })
                                    +    }
                                    +
                                    +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                    +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                    +
                                    +    var index = lunr(function () {
                                    +        this.ref('location')
                                    +        this.field('title')
                                    +        this.field('text')
                                    +        documenterSearchIndex['docs'].forEach(function(e) {
                                    +            this.add(e)
                                    +        }, this)
                                    +    })
                                    +    var store = {}
                                    +
                                    +    documenterSearchIndex['docs'].forEach(function(e) {
                                    +        store[e.location] = {title: e.title, category: e.category}
                                    +    })
                                    +
                                    +    $(function(){
                                    +        function update_search(querystring) {
                                    +            tokens = lunr.tokenizer(querystring)
                                    +            results = index.query(function (q) {
                                    +                tokens.forEach(function (t) {
                                    +                    q.term(t.toString(), {
                                    +                        fields: ["title"],
                                    +                        boost: 100,
                                    +                        usePipeline: false,
                                    +                        editDistance: 0,
                                    +                        wildcard: lunr.Query.wildcard.NONE
                                    +                    })
                                    +                    q.term(t.toString(), {
                                    +                        fields: ["title"],
                                    +                        boost: 10,
                                    +                        usePipeline: false,
                                    +                        editDistance: 2,
                                    +                        wildcard: lunr.Query.wildcard.NONE
                                    +                    })
                                    +                    q.term(t.toString(), {
                                    +                        fields: ["text"],
                                    +                        boost: 1,
                                    +                        usePipeline: true,
                                    +                        editDistance: 0,
                                    +                        wildcard: lunr.Query.wildcard.NONE
                                    +                    })
                                    +                })
                                    +            })
                                    +            $('#search-info').text("Number of results: " + results.length)
                                    +            $('#search-results').empty()
                                    +            results.forEach(function(result) {
                                    +                data = store[result.ref]
                                    +                link = $('')
                                    +                link.text(data.title)
                                    +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                    +                cat = $('('+data.category+')')
                                    +                li = $('
                                  • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.2.0/index.html b/v0.2.0/index.html new file mode 100644 index 00000000..1229b529 --- /dev/null +++ b/v0.2.0/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl diff --git a/v0.2.0/lib/methods.html b/v0.2.0/lib/methods.html new file mode 100644 index 00000000..3f57fbda --- /dev/null +++ b/v0.2.0/lib/methods.html @@ -0,0 +1,2 @@ + +Methods · MathematicalSystems.jl

                                    Methods

                                    Methods

                                    This section describes systems methods implemented in MathematicalSystems.jl.

                                    States

                                    statedim(s::AbstractSystem)

                                    Returns the dimension of the state space of system s.

                                    source
                                    stateset(s::AbstractSystem)

                                    Returns the set of allowed states of system s.

                                    source

                                    Inputs

                                    inputdim(s::AbstractSystem)

                                    Returns the dimension of the input space of system s.

                                    source
                                    inputset(s::AbstractSystem)

                                    Returns the set of allowed inputs of system s.

                                    source
                                    nextinput(input::ConstantInput, n::Int=1)

                                    Returns the first n elements of this input.

                                    Input

                                    • input – a constant input

                                    • n – (optional, default: 1) the number of desired elements

                                    Output

                                    A repeated iterator that generates n equal samples of this input.

                                    source
                                    nextinput(input::VaryingInput, n::Int=1)

                                    Returns the first n elements of this input.

                                    Input

                                    • input – varying input

                                    • n – (optional, default: 1) number of desired elements

                                    Output

                                    An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                    source
                                    diff --git a/v0.2.0/lib/types.html b/v0.2.0/lib/types.html new file mode 100644 index 00000000..a560ed7f --- /dev/null +++ b/v0.2.0/lib/types.html @@ -0,0 +1,62 @@ + +Types · MathematicalSystems.jl

                                    Types

                                    Types

                                    This section describes systems types implemented in MathematicalSystems.jl.

                                    Abstract Systems

                                    AbstractSystem

                                    Abstract supertype for all system types.

                                    source
                                    AbstractContinuousSystem

                                    Abstract supertype for all continuous system types.

                                    source
                                    AbstractDiscreteSystem

                                    Abstract supertype for all discrete system types.

                                    source

                                    Continuous Systems

                                    ContinuousIdentitySystem <: AbstractContinuousSystem

                                    Trivial identity continuous-time system of the form

                                    \[x' = 0.\]
                                    source
                                    ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                    Trivial identity continuous-time system with state constraints of the form

                                    \[x' = 0, x(t) ∈ \mathcal{X}.\]
                                    source
                                    LinearContinuousSystem

                                    Continuous-time linear system of the form

                                    \[x' = A x.\]

                                    Fields

                                    • A – square matrix

                                    source
                                    LinearControlContinuousSystem

                                    Continuous-time linear control system of the form

                                    \[x' = A x + B u.\]

                                    Fields

                                    • A – square matrix

                                    • B – matrix

                                    source
                                    ConstrainedLinearContinuousSystem

                                    Continuous-time linear system with state constraints of the form

                                    \[x' = A x, x(t) ∈ \mathcal{X}.\]

                                    Fields

                                    • A – square matrix

                                    • X – state constraints

                                    source
                                    ConstrainedLinearControlContinuousSystem

                                    Continuous-time linear control system with state constraints of the form

                                    \[x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                                    Fields

                                    • A – square matrix

                                    • B – matrix

                                    • X – state constraints

                                    • U – input constraints

                                    source
                                    LinearAlgebraicContinuousSystem

                                    Continuous-time linear algebraic system of the form

                                    \[E x' = A x.\]

                                    Fields

                                    • A – matrix

                                    • E – matrix, same size as A

                                    source
                                    ConstrainedLinearAlgebraicContinuousSystem

                                    Continuous-time linear system with state constraints of the form

                                    \[E x' = A x, x(t) ∈ \mathcal{X}.\]

                                    Fields

                                    • A – matrix

                                    • E – matrix, same size as A

                                    • X – state constraints

                                    source
                                    PolynomialContinuousSystem

                                    Continuous-time polynomial system of the form

                                    \[x' = p(x).\]

                                    Fields

                                    • p – polynomial

                                    • statedim – number of state variables

                                    source
                                    ConstrainedPolynomialContinuousSystem

                                    Continuous-time polynomial system with state constraints,

                                    \[x' = p(x), x(t) ∈ \mathcal{X}\]

                                    Fields

                                    • p – polynomial

                                    • X – constraint set

                                    • statedim – number of state variables

                                    source

                                    Discrete Systems

                                    DiscreteIdentitySystem <: AbstractDiscreteSystem

                                    Trivial identity discrete-time system of the form

                                    \[x_{k+1} = x_k.\]
                                    source
                                    ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                    Trivial identity discrete-time system with state constraints of the form

                                    \[x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]
                                    source
                                    LinearDiscreteSystem

                                    Discrete-time linear system of the form

                                    \[x_{k+1} = A x_k.\]

                                    Fields

                                    • A – square matrix

                                    source
                                    LinearControlDiscreteSystem

                                    Discrete-time linear control system of the form

                                    \[x_{k+1} = A x_k + B u_k.\]

                                    Fields

                                    • A – square matrix

                                    • B – matrix

                                    source
                                    ConstrainedLinearDiscreteSystem

                                    Discrete-time linear system with state constraints of the form

                                    \[x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                    Fields

                                    • A – square matrix

                                    • X – state constraints

                                    source
                                    ConstrainedLinearControlDiscreteSystem

                                    Discrete-time linear control system with state constraints of the form

                                    \[x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                                    Fields

                                    • A – square matrix

                                    • B – matrix

                                    • X – state constraints

                                    • U – input constraints

                                    source
                                    LinearAlgebraicDiscreteSystem

                                    Discrete-time linear algebraic system of the form

                                    \[E x_{k+1} = A x_k.\]

                                    Fields

                                    • A – matrix

                                    • E – matrix, same size as A

                                    source
                                    ConstrainedLinearAlgebraicDiscreteSystem

                                    Discrete-time linear system with state constraints of the form

                                    \[E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                    Fields

                                    • A – matrix

                                    • E – matrix, same size as A

                                    • X – state constraints

                                    source
                                    PolynomialDiscreteSystem

                                    Discrete-time polynomial system of the form

                                    \[x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                    Fields

                                    • p – polynomial

                                    • statedim – number of state variables

                                    source
                                    ConstrainedPolynomialDiscreteSystem

                                    Discrete-time polynomial system with state constraints,

                                    \[x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                    Fields

                                    • p – polynomial

                                    • X – constraint set

                                    • statedim – number of state variables

                                    source

                                    Initial Value Problems

                                    InitialValueProblem

                                    Parametric composite type for initial value problems. It is parameterized in the system's type.

                                    Fields

                                    • s – system

                                    • x0 – initial state

                                    Examples

                                    The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

                                    julia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);
                                    +
                                    +julia> p.x0
                                    +2-element Array{Float64,1}:
                                    + -0.5
                                    +  0.5
                                    +
                                    +julia> statedim(p)
                                    +2
                                    +
                                    +julia> inputdim(p)
                                    +0
                                    source
                                    IVP

                                    IVP is an alias for InitialValueProblem.

                                    source

                                    Input Types

                                    AbstractInput

                                    Abstract supertype for all input types.

                                    Notes

                                    The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                    Iteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                    A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                    source
                                    ConstantInput{UT} <: AbstractInput

                                    Type representing an input that remains constant in time.

                                    Fields

                                    • U – input set

                                    Examples

                                    The constant input holds a single element and its length is infinite. To access the field U, you can use Base's next given a state, or the method nextinput given the number of desired input elements:

                                    julia> c = ConstantInput(-1//2)
                                    +MathematicalSystems.ConstantInput{Rational{Int64}}(-1//2)
                                    +
                                    +julia> next(c, 1)
                                    +(-1//2, nothing)
                                    +
                                    +julia> next(c, 2)
                                    +(-1//2, nothing)
                                    +
                                    +julia> collect(nextinput(c, 4))
                                    +4-element Array{Rational{Int64},1}:
                                    + -1//2
                                    + -1//2
                                    + -1//2
                                    + -1//2

                                    The elements of this input are rational numbers:

                                    julia> eltype(c)
                                    +Rational{Int64}

                                    To transform a constant input, you can use map as in:

                                    julia> map(x->2*x, c)
                                    +MathematicalSystems.ConstantInput{Rational{Int64}}(-1//1)
                                    source
                                    VaryingInput{UT} <: AbstractInput

                                    Type representing an input that may vary with time.

                                    Fields

                                    • U – vector of input sets

                                    Examples

                                    The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                    julia> v = VaryingInput([-1//2, 1//2])
                                    +MathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])
                                    +
                                    +julia> length(v)
                                    +2
                                    +
                                    +julia> eltype(v)
                                    +Rational{Int64}

                                    Base's next method receives the input and an integer state and returns the input element and the next iteration state:

                                    julia> next(v, 1)
                                    +(-1//2, 2)
                                    +
                                    +julia> next(v, 2)
                                    +(1//2, 3)

                                    The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                    julia> typeof(nextinput(v))
                                    +Base.Iterators.Take{MathematicalSystems.VaryingInput{Rational{Int64}}}
                                    +
                                    +julia> collect(nextinput(v, 1))
                                    +1-element Array{Rational{Int64},1}:
                                    + -1//2
                                    +
                                    +julia> collect(nextinput(v, 2))
                                    +2-element Array{Rational{Int64},1}:
                                    + -1//2
                                    +  1//2

                                    You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                    julia> collect(v)
                                    +2-element Array{Rational{Int64},1}:
                                    + -1//2
                                    +  1//2
                                    +
                                    +julia> [2*vi for vi in v]
                                    +2-element Array{Rational{Int64},1}:
                                    + -1//1
                                    +  1//1

                                    Since this input type is finite, querying more elements than its length returns the full vector:

                                    julia> collect(nextinput(v, 4))
                                    +2-element Array{Rational{Int64},1}:
                                    + -1//2
                                    +  1//2

                                    To transform a varying input, you can use map as in:

                                    julia> map(x->2*x, v)
                                    +MathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])
                                    source
                                    diff --git a/v0.2.0/search.html b/v0.2.0/search.html new file mode 100644 index 00000000..c2092db7 --- /dev/null +++ b/v0.2.0/search.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                    Search

                                    Search

                                    Number of results: loading...

                                      diff --git a/v0.2.0/search_index.js b/v0.2.0/search_index.js new file mode 100644 index 00000000..b41f165d --- /dev/null +++ b/v0.2.0/search_index.js @@ -0,0 +1,451 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "index.html#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "index.html#MathematicalSystems.jl-1", + "page": "Home", + "title": "MathematicalSystems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]MathematicalSystems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "index.html#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled,linear algebraic, etc.Iterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "index.html#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types.html#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types.html#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in MathematicalSystems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form\n\nx = 0\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form\n\nx = 0x(t) mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form\n\nx = A x\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form\n\nx = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nx = A xx(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form\n\nx = A x + B ux(t) mathcalXu(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form\n\nE x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nE x = A xx(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.PolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialContinuousSystem", + "category": "type", + "text": "PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form\n\nx = p(x)\n\nFields\n\np – polynomial\nstatedim – number of state variables\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "category": "type", + "text": "ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints,\n\nx = p(x) x(t) mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n" +}, + +{ + "location": "lib/types.html#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.DiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form\n\nx_k+1 = x_k\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form\n\nx_k+1 = x_kx_k mathcalX\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form\n\nx_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form\n\nx_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nx_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form\n\nx_k+1 = A x_k + B u_kx_k mathcalXu_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form\n\nE x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nE x_k+1 = A x_kx_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.PolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialDiscreteSystem", + "category": "type", + "text": "PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form\n\nx_k+1 = p(x_k)x_k mathcalX\n\nFields\n\np – polynomial\nstatedim – number of state variables\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "category": "type", + "text": "ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints,\n\nx_k+1 = p(x_k)x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n" +}, + +{ + "location": "lib/types.html#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.InitialValueProblem", + "page": "Types", + "title": "MathematicalSystems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem(-eye(2)), [-1/2., 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.IVP", + "page": "Types", + "title": "MathematicalSystems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n" +}, + +{ + "location": "lib/types.html#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractInput", + "page": "Types", + "title": "MathematicalSystems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.next takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstantInput", + "page": "Types", + "title": "MathematicalSystems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s next given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nMathematicalSystems.ConstantInput{Rational{Int64}}(-1//2)\n\njulia> next(c, 1)\n(-1//2, nothing)\n\njulia> next(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nMathematicalSystems.ConstantInput{Rational{Int64}}(-1//1)\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.VaryingInput", + "page": "Types", + "title": "MathematicalSystems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nMathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s next method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> next(v, 1)\n(-1//2, 2)\n\njulia> next(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{MathematicalSystems.VaryingInput{Rational{Int64}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nMathematicalSystems.VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n" +}, + +{ + "location": "lib/types.html#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/methods.html#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods.html#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in MathematicalSystems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.statedim", + "page": "Methods", + "title": "MathematicalSystems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.stateset", + "page": "Methods", + "title": "MathematicalSystems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputdim", + "page": "Methods", + "title": "MathematicalSystems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputset", + "page": "Methods", + "title": "MathematicalSystems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.nextinput", + "page": "Methods", + "title": "MathematicalSystems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "about.html#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about.html#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about.html#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about.html#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about.html#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"MathematicalSystems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about.html#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about.html#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about.html#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to MathematicalSystems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/v0.2.0/siteinfo.js b/v0.2.0/siteinfo.js new file mode 100644 index 00000000..057c824f --- /dev/null +++ b/v0.2.0/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.2.0"; diff --git a/v0.3 b/v0.3 new file mode 120000 index 00000000..d4dfa563 --- /dev/null +++ b/v0.3 @@ -0,0 +1 @@ +v0.3.0 \ No newline at end of file diff --git a/v0.3.0/about.html b/v0.3.0/about.html new file mode 100644 index 00000000..899a2e2d --- /dev/null +++ b/v0.3.0/about.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                      About

                                      About

                                      This page contains some general information about this project, and recommendations about contributing.

                                      Contributing

                                      If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                      Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                      Branches and pull requests (PR)

                                      We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                      Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                      Unit testing and continuous integration (CI)

                                      This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                      When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                      $ julia --color=yes test/runtests.jl

                                      Alternatively, you can achieve the same from inside the REPL using the following command:

                                      julia> Pkg.test("MathematicalSystems")

                                      We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                      Contributing to the documentation

                                      New functions and types should be documented according to our guidelines directly in the source code.

                                      You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                      julia> ?LinearContinuousSystem

                                      This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                      To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                      $ julia --color=yes docs/make.jl

                                      Note that this also runs all doctests which will take some time.

                                      Related projects

                                      This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                      Below we list more related projects.

                                      Package nameDescription
                                      HybridSystems.jlHybrid Systems definitions in Julia.
                                      LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                      ControlToolbox.jlAnalysis and design tools for control systems.
                                      ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                      DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                      ControlSystems.jlA Control Systems Toolbox for Julia
                                      ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                      Credits

                                      These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                      diff --git a/v0.3.0/assets/arrow.svg b/v0.3.0/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.3.0/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.3.0/assets/documenter.css b/v0.3.0/assets/documenter.css new file mode 100644 index 00000000..26c8166f --- /dev/null +++ b/v0.3.0/assets/documenter.css @@ -0,0 +1,573 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                      the is very first thing on the page (i.e. the second element + * in the
                                      , * after the
                                      , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                       surrounding the , while
                                      + * highlight.js applies the .hljs style directly to the  tag.
                                      + */
                                      +.hljs {
                                      +    background-color: transparent;
                                      +    padding: 0;
                                      +}
                                      +
                                      +@media only screen and (max-width: 768px) {
                                      +    nav.toc {
                                      +        position: fixed;
                                      +        overflow-y: scroll;
                                      +        width: 16em;
                                      +        left: -16em;
                                      +        -webkit-overflow-scrolling: touch;
                                      +        -webkit-transition-property: left; /* Safari */
                                      +        -webkit-transition-duration: 0.3s; /* Safari */
                                      +        transition-property: left;
                                      +        transition-duration: 0.3s;
                                      +        -webkit-transition-timing-function: ease-out; /* Safari */
                                      +        transition-timing-function: ease-out;
                                      +        z-index: 2;
                                      +    }
                                      +
                                      +    nav.toc.show {
                                      +        left: 0;
                                      +    }
                                      +
                                      +    article {
                                      +        margin-left: 0;
                                      +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                      +        overflow-wrap: break-word;
                                      +    }
                                      +
                                      +    article > header {
                                      +        position: fixed;
                                      +        left: 0;
                                      +        z-index: 1;
                                      +    }
                                      +
                                      +    article > header nav, hr {
                                      +        display: none;
                                      +    }
                                      +
                                      +    article > header div#topbar {
                                      +        display: block; /* is mobile */
                                      +        position: fixed;
                                      +        width: 100%;
                                      +        height: 1.5em;
                                      +        padding-top: 1em;
                                      +        padding-bottom: 1em;
                                      +        background-color: #fcfcfc;
                                      +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                      +        top: 0;
                                      +        -webkit-transition-property: top; /* Safari */
                                      +        -webkit-transition-duration: 0.3s; /* Safari */
                                      +        transition-property: top;
                                      +        transition-duration: 0.3s;
                                      +    }
                                      +
                                      +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                      +        top: -4em;
                                      +        -webkit-transition-property: top; /* Safari */
                                      +        -webkit-transition-duration: 0.7s; /* Safari */
                                      +        transition-property: top;
                                      +        transition-duration: 0.7s;
                                      +    }
                                      +
                                      +    article > header div#topbar span {
                                      +        position: fixed;
                                      +        width: 80%;
                                      +        height: 1.5em;
                                      +        margin-top: -0.1em;
                                      +        margin-left: 0.9em;
                                      +        font-size: 1.2em;
                                      +        overflow: hidden;
                                      +    }
                                      +
                                      +    article > header div#topbar a.fa-bars {
                                      +        float: right;
                                      +        padding: 0.6em;
                                      +        margin-top: -0.6em;
                                      +        margin-right: 0.3em;
                                      +        font-size: 1.5em;
                                      +    }
                                      +
                                      +    article > header div#topbar a.fa-bars:visited {
                                      +        color: #3091d1;
                                      +    }
                                      +
                                      +    article table {
                                      +        overflow-x: auto;
                                      +        display: block;
                                      +    }
                                      +
                                      +    article div.MathJax_Display {
                                      +        overflow: scroll;
                                      +    }
                                      +
                                      +    article span.MathJax {
                                      +        overflow: hidden;
                                      +    }
                                      +}
                                      +
                                      +@media only screen and (max-width: 320px) {
                                      +    body {
                                      +        font-size: 15px;
                                      +    }
                                      +}
                                      diff --git a/v0.3.0/assets/documenter.js b/v0.3.0/assets/documenter.js
                                      new file mode 100644
                                      index 00000000..5d31622f
                                      --- /dev/null
                                      +++ b/v0.3.0/assets/documenter.js
                                      @@ -0,0 +1,129 @@
                                      +/*
                                      + * Part of Documenter.jl
                                      + *     https://github.com/JuliaDocs/Documenter.jl
                                      + *
                                      + * License: MIT
                                      + */
                                      +
                                      +requirejs.config({
                                      +    paths: {
                                      +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                      +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                      +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                      +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                      +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                      +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                      +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                      +    },
                                      +    shim: {
                                      +        'mathjax' : {
                                      +            exports: "MathJax"
                                      +        },
                                      +        'highlight-julia': ['highlight'],
                                      +        'highlight-julia-repl': ['highlight'],
                                      +    }
                                      +});
                                      +
                                      +// Load MathJax
                                      +require(['mathjax'], function(MathJax) {
                                      +    MathJax.Hub.Config({
                                      +      "tex2jax": {
                                      +        inlineMath: [['$','$'], ['\\(','\\)']],
                                      +        processEscapes: true
                                      +      }
                                      +    });
                                      +    MathJax.Hub.Config({
                                      +      config: ["MMLorHTML.js"],
                                      +      jax: [
                                      +        "input/TeX",
                                      +        "output/HTML-CSS",
                                      +        "output/NativeMML"
                                      +      ],
                                      +      extensions: [
                                      +        "MathMenu.js",
                                      +        "MathZoom.js",
                                      +        "TeX/AMSmath.js",
                                      +        "TeX/AMSsymbols.js",
                                      +        "TeX/autobold.js",
                                      +        "TeX/autoload-all.js"
                                      +      ]
                                      +    });
                                      +    MathJax.Hub.Config({
                                      +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                      +    });
                                      +})
                                      +
                                      +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                      +    $(document).ready(function() {
                                      +        hljs.initHighlighting();
                                      +    })
                                      +
                                      +})
                                      +
                                      +// update the version selector with info from the siteinfo.js and ../versions.js files
                                      +require(['jquery'], function($) {
                                      +    $(document).ready(function() {
                                      +        var version_selector = $("#version-selector");
                                      +
                                      +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                      +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                      +            var option = $("");
                                      +            version_selector.append(option);
                                      +        }
                                      +
                                      +        if (typeof DOC_VERSIONS !== 'undefined') {
                                      +            var existing_versions = $('#version-selector > option');
                                      +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                      +            DOC_VERSIONS.forEach(function(each) {
                                      +                var version_url = documenterBaseURL + "/../" + each;
                                      +                var existing_id = $.inArray(each, existing_versions_texts);
                                      +                // if not already in the version selector, add it as a new option,
                                      +                // otherwise update the old option with the URL and enable it
                                      +                if (existing_id == -1) {
                                      +                    var option = $("");
                                      +                    version_selector.append(option);
                                      +                } else {
                                      +                    var option = existing_versions[existing_id];
                                      +                    option.value = version_url;
                                      +                    option.disabled = false;
                                      +                }
                                      +            });
                                      +        }
                                      +
                                      +        // only show the version selector if the selector has been populated
                                      +        if ($('#version-selector > option').length > 0) {
                                      +            version_selector.css("visibility", "visible");
                                      +        }
                                      +    })
                                      +
                                      +})
                                      +
                                      +// mobile
                                      +require(['jquery', 'headroom'], function($, Headroom) {
                                      +    $(document).ready(function() {
                                      +        var navtoc = $("nav.toc");
                                      +        $("nav.toc li.current a.toctext").click(function() {
                                      +            navtoc.toggleClass('show');
                                      +        });
                                      +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                      +            ev.preventDefault();
                                      +            navtoc.toggleClass('show');
                                      +            if (navtoc.hasClass('show')) {
                                      +                var title = $("article > header div#topbar span").text();
                                      +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                      +            }
                                      +        });
                                      +        $("article#docs").bind('click', function(ev) {
                                      +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                      +                return;
                                      +            }
                                      +            if (navtoc.hasClass('show')) {
                                      +                navtoc.removeClass('show');
                                      +            }
                                      +        });
                                      +        if ($("article > header div#topbar").css('display') == 'block') {
                                      +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                      +            headroom.init();
                                      +        }
                                      +    })
                                      +})
                                      diff --git a/v0.3.0/assets/juliareach.css b/v0.3.0/assets/juliareach.css
                                      new file mode 100644
                                      index 00000000..64b0d92d
                                      --- /dev/null
                                      +++ b/v0.3.0/assets/juliareach.css
                                      @@ -0,0 +1,583 @@
                                      +/*
                                      + * The default CSS style for Documenter.jl generated sites
                                      + *
                                      + * Heavily inspired by the Julia Sphinx theme
                                      + *     https://github.com/JuliaLang/JuliaDoc
                                      + * which extends the sphinx_rtd_theme
                                      + *     https://github.com/snide/sphinx_rtd_theme
                                      + *
                                      + * Part of Documenter.jl
                                      + *     https://github.com/JuliaDocs/Documenter.jl
                                      + *
                                      + * License: MIT
                                      + */
                                      +
                                      +/* The original CSS is modified such that it right-justifies the text. */
                                      +
                                      +/* fonts */
                                      +body, input {
                                      +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                      +  font-size: 16px;
                                      +  color: #222;
                                      +  text-rendering: optimizeLegibility;
                                      +}
                                      +
                                      +pre, code, kbd {
                                      +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                      +  font-size: 0.90em;
                                      +}
                                      +
                                      +pre code {
                                      +  font-size: 1em;
                                      +}
                                      +
                                      +a {
                                      +    color: #2980b9;
                                      +    text-decoration: none;
                                      +}
                                      +
                                      +a:hover {
                                      +    color: #3091d1;
                                      +}
                                      +
                                      +a:visited {
                                      +    color: #9b59b6;
                                      +}
                                      +
                                      +body {
                                      +    line-height: 1.5;
                                      +}
                                      +
                                      +h1 {
                                      +    font-size: 1.75em;
                                      +}
                                      +
                                      +/* Unless the 

                                      the is very first thing on the page (i.e. the second element + * in the
                                      , * after the
                                      , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                       surrounding the , while
                                      + * highlight.js applies the .hljs style directly to the  tag.
                                      + */
                                      +.hljs {
                                      +    background-color: transparent;
                                      +    padding: 0;
                                      +}
                                      +
                                      +@media only screen and (max-width: 768px) {
                                      +    nav.toc {
                                      +        position: fixed;
                                      +        overflow-y: scroll;
                                      +        width: 16em;
                                      +        left: -16em;
                                      +        -webkit-overflow-scrolling: touch;
                                      +        -webkit-transition-property: left; /* Safari */
                                      +        -webkit-transition-duration: 0.3s; /* Safari */
                                      +        transition-property: left;
                                      +        transition-duration: 0.3s;
                                      +        -webkit-transition-timing-function: ease-out; /* Safari */
                                      +        transition-timing-function: ease-out;
                                      +        z-index: 2;
                                      +    }
                                      +
                                      +    nav.toc.show {
                                      +        left: 0;
                                      +    }
                                      +
                                      +    article {
                                      +        margin-left: 0;
                                      +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                      +        overflow-wrap: break-word;
                                      +    }
                                      +
                                      +    article > header {
                                      +        position: fixed;
                                      +        left: 0;
                                      +        z-index: 1;
                                      +    }
                                      +
                                      +    article > header nav, hr {
                                      +        display: none;
                                      +    }
                                      +
                                      +    article > header div#topbar {
                                      +        display: block; /* is mobile */
                                      +        position: fixed;
                                      +        width: 100%;
                                      +        height: 1.5em;
                                      +        padding-top: 1em;
                                      +        padding-bottom: 1em;
                                      +        background-color: #fcfcfc;
                                      +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                      +        top: 0;
                                      +        -webkit-transition-property: top; /* Safari */
                                      +        -webkit-transition-duration: 0.3s; /* Safari */
                                      +        transition-property: top;
                                      +        transition-duration: 0.3s;
                                      +    }
                                      +
                                      +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                      +        top: -4em;
                                      +        -webkit-transition-property: top; /* Safari */
                                      +        -webkit-transition-duration: 0.7s; /* Safari */
                                      +        transition-property: top;
                                      +        transition-duration: 0.7s;
                                      +    }
                                      +
                                      +    article > header div#topbar span {
                                      +        position: fixed;
                                      +        width: 80%;
                                      +        height: 1.5em;
                                      +        margin-top: -0.1em;
                                      +        margin-left: 0.9em;
                                      +        font-size: 1.2em;
                                      +        overflow: hidden;
                                      +    }
                                      +
                                      +    article > header div#topbar a.fa-bars {
                                      +        float: right;
                                      +        padding: 0.6em;
                                      +        margin-top: -0.6em;
                                      +        margin-right: 0.3em;
                                      +        font-size: 1.5em;
                                      +    }
                                      +
                                      +    article > header div#topbar a.fa-bars:visited {
                                      +        color: #3091d1;
                                      +    }
                                      +
                                      +    article table {
                                      +        overflow-x: auto;
                                      +        display: block;
                                      +    }
                                      +
                                      +    article div.MathJax_Display {
                                      +        overflow: scroll;
                                      +    }
                                      +
                                      +    article span.MathJax {
                                      +        overflow: hidden;
                                      +    }
                                      +}
                                      +
                                      +@media only screen and (max-width: 320px) {
                                      +    body {
                                      +        font-size: 15px;
                                      +    }
                                      +}
                                      diff --git a/v0.3.0/assets/search.js b/v0.3.0/assets/search.js
                                      new file mode 100644
                                      index 00000000..f99b3786
                                      --- /dev/null
                                      +++ b/v0.3.0/assets/search.js
                                      @@ -0,0 +1,250 @@
                                      +/*
                                      + * Part of Documenter.jl
                                      + *     https://github.com/JuliaDocs/Documenter.jl
                                      + *
                                      + * License: MIT
                                      + */
                                      +
                                      +// parseUri 1.2.2
                                      +// (c) Steven Levithan 
                                      +// MIT License
                                      +function parseUri (str) {
                                      +	var	o   = parseUri.options,
                                      +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                      +		uri = {},
                                      +		i   = 14;
                                      +
                                      +	while (i--) uri[o.key[i]] = m[i] || "";
                                      +
                                      +	uri[o.q.name] = {};
                                      +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                      +		if ($1) uri[o.q.name][$1] = $2;
                                      +	});
                                      +
                                      +	return uri;
                                      +};
                                      +parseUri.options = {
                                      +	strictMode: false,
                                      +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                      +	q:   {
                                      +		name:   "queryKey",
                                      +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                      +	},
                                      +	parser: {
                                      +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                      +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                      +	}
                                      +};
                                      +
                                      +requirejs.config({
                                      +    paths: {
                                      +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                      +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.1/lunr.min',
                                      +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
                                      +    }
                                      +});
                                      +
                                      +var currentScript = document.currentScript;
                                      +
                                      +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                      +    $("#search-form").submit(function(e) {
                                      +        e.preventDefault()
                                      +    })
                                      +
                                      +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                      +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                      +    // ideally we'd just filter the original list but it's not available as a variable
                                      +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                      +        'a',
                                      +        'able',
                                      +        'about',
                                      +        'across',
                                      +        'after',
                                      +        'almost',
                                      +        'also',
                                      +        'am',
                                      +        'among',
                                      +        'an',
                                      +        'and',
                                      +        'are',
                                      +        'as',
                                      +        'at',
                                      +        'be',
                                      +        'because',
                                      +        'been',
                                      +        'but',
                                      +        'by',
                                      +        'can',
                                      +        'cannot',
                                      +        'could',
                                      +        'dear',
                                      +        'did',
                                      +        'does',
                                      +        'either',
                                      +        'ever',
                                      +        'every',
                                      +        'from',
                                      +        'got',
                                      +        'had',
                                      +        'has',
                                      +        'have',
                                      +        'he',
                                      +        'her',
                                      +        'hers',
                                      +        'him',
                                      +        'his',
                                      +        'how',
                                      +        'however',
                                      +        'i',
                                      +        'if',
                                      +        'into',
                                      +        'it',
                                      +        'its',
                                      +        'just',
                                      +        'least',
                                      +        'like',
                                      +        'likely',
                                      +        'may',
                                      +        'me',
                                      +        'might',
                                      +        'most',
                                      +        'must',
                                      +        'my',
                                      +        'neither',
                                      +        'no',
                                      +        'nor',
                                      +        'not',
                                      +        'of',
                                      +        'off',
                                      +        'often',
                                      +        'on',
                                      +        'only',
                                      +        'or',
                                      +        'other',
                                      +        'our',
                                      +        'own',
                                      +        'rather',
                                      +        'said',
                                      +        'say',
                                      +        'says',
                                      +        'she',
                                      +        'should',
                                      +        'since',
                                      +        'so',
                                      +        'some',
                                      +        'than',
                                      +        'that',
                                      +        'the',
                                      +        'their',
                                      +        'them',
                                      +        'then',
                                      +        'there',
                                      +        'these',
                                      +        'they',
                                      +        'this',
                                      +        'tis',
                                      +        'to',
                                      +        'too',
                                      +        'twas',
                                      +        'us',
                                      +        'wants',
                                      +        'was',
                                      +        'we',
                                      +        'were',
                                      +        'what',
                                      +        'when',
                                      +        'who',
                                      +        'whom',
                                      +        'why',
                                      +        'will',
                                      +        'would',
                                      +        'yet',
                                      +        'you',
                                      +        'your'
                                      +        ])
                                      +
                                      +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                      +    // would not find anything if searching for "add!", only for the entire qualification
                                      +    lunr.tokenizer.separator = /[\s\-\.]+/
                                      +
                                      +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                      +    lunr.trimmer = function (token) {
                                      +        return token.update(function (s) {
                                      +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                      +        })
                                      +    }
                                      +
                                      +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                      +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                      +
                                      +    var index = lunr(function () {
                                      +        this.ref('location')
                                      +        this.field('title')
                                      +        this.field('text')
                                      +        documenterSearchIndex['docs'].forEach(function(e) {
                                      +            this.add(e)
                                      +        }, this)
                                      +    })
                                      +    var store = {}
                                      +
                                      +    documenterSearchIndex['docs'].forEach(function(e) {
                                      +        store[e.location] = {title: e.title, category: e.category}
                                      +    })
                                      +
                                      +    $(function(){
                                      +        function update_search(querystring) {
                                      +            tokens = lunr.tokenizer(querystring)
                                      +            results = index.query(function (q) {
                                      +                tokens.forEach(function (t) {
                                      +                    q.term(t.toString(), {
                                      +                        fields: ["title"],
                                      +                        boost: 100,
                                      +                        usePipeline: false,
                                      +                        editDistance: 0,
                                      +                        wildcard: lunr.Query.wildcard.NONE
                                      +                    })
                                      +                    q.term(t.toString(), {
                                      +                        fields: ["title"],
                                      +                        boost: 10,
                                      +                        usePipeline: false,
                                      +                        editDistance: 2,
                                      +                        wildcard: lunr.Query.wildcard.NONE
                                      +                    })
                                      +                    q.term(t.toString(), {
                                      +                        fields: ["text"],
                                      +                        boost: 1,
                                      +                        usePipeline: true,
                                      +                        editDistance: 0,
                                      +                        wildcard: lunr.Query.wildcard.NONE
                                      +                    })
                                      +                })
                                      +            })
                                      +            $('#search-info').text("Number of results: " + results.length)
                                      +            $('#search-results').empty()
                                      +            results.forEach(function(result) {
                                      +                data = store[result.ref]
                                      +                link = $('')
                                      +                link.text(data.title)
                                      +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                      +                cat = $('('+data.category+')')
                                      +                li = $('
                                    • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.3.0/index.html b/v0.3.0/index.html new file mode 100644 index 00000000..a76af2f8 --- /dev/null +++ b/v0.3.0/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                      Home

                                      MathematicalSystems.jl

                                      MathematicalSystems is a Julia package for mathematical systems interfaces.

                                      Features

                                      • Generic and flexible systems definitions, while being fast and type stable.
                                      • Types for mathematical systems modeling: continuous, discrete, controlled,

                                      linear algebraic, etc.

                                      • Iterator interfaces to handle constant or time-varying inputs.

                                      Library Outline

                                      diff --git a/v0.3.0/lib/methods.html b/v0.3.0/lib/methods.html new file mode 100644 index 00000000..724e89c4 --- /dev/null +++ b/v0.3.0/lib/methods.html @@ -0,0 +1,2 @@ + +Methods · MathematicalSystems.jl

                                      Methods

                                      Methods

                                      This section describes systems methods implemented in MathematicalSystems.jl.

                                      States

                                      statedim(s::AbstractSystem)

                                      Returns the dimension of the state space of system s.

                                      source
                                      stateset(s::AbstractSystem)

                                      Returns the set of allowed states of system s.

                                      source

                                      Inputs

                                      inputdim(s::AbstractSystem)

                                      Returns the dimension of the input space of system s.

                                      source
                                      inputset(s::AbstractSystem)

                                      Returns the set of allowed inputs of system s.

                                      source
                                      nextinput(input::ConstantInput, n::Int=1)

                                      Returns the first n elements of this input.

                                      Input

                                      • input – a constant input
                                      • n – (optional, default: 1) the number of desired elements

                                      Output

                                      A repeated iterator that generates n equal samples of this input.

                                      source
                                      nextinput(input::VaryingInput, n::Int=1)

                                      Returns the first n elements of this input.

                                      Input

                                      • input – varying input
                                      • n – (optional, default: 1) number of desired elements

                                      Output

                                      An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                      source

                                      Output

                                      outputdim(m::AbstractMap)

                                      Returns the dimension of the output space of the map m.

                                      source
                                      outputmap(s::SystemWithOutput)

                                      Returns the output map of a system with output.

                                      source
                                      diff --git a/v0.3.0/lib/types.html b/v0.3.0/lib/types.html new file mode 100644 index 00000000..023a6b7e --- /dev/null +++ b/v0.3.0/lib/types.html @@ -0,0 +1,64 @@ + +Types · MathematicalSystems.jl

                                      Types

                                      Types

                                      This section describes systems types implemented in MathematicalSystems.jl.

                                      Abstract Systems

                                      AbstractSystem

                                      Abstract supertype for all system types.

                                      source
                                      AbstractContinuousSystem

                                      Abstract supertype for all continuous system types.

                                      source
                                      AbstractDiscreteSystem

                                      Abstract supertype for all discrete system types.

                                      source

                                      Continuous Systems

                                      ContinuousIdentitySystem <: AbstractContinuousSystem

                                      Trivial identity continuous-time system of the form

                                      \[x' = 0.\]
                                      source
                                      ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                      Trivial identity continuous-time system with state constraints of the form

                                      \[x' = 0, x(t) ∈ \mathcal{X}.\]
                                      source
                                      LinearContinuousSystem

                                      Continuous-time linear system of the form

                                      \[x' = A x.\]

                                      Fields

                                      • A – square matrix
                                      source
                                      AffineContinuousSystem

                                      Continuous-time affine system of the form

                                      \[x' = A x + b.\]

                                      Fields

                                      • A – square matrix
                                      • b – vector
                                      source
                                      LinearControlContinuousSystem

                                      Continuous-time linear control system of the form

                                      \[x' = A x + B u.\]

                                      Fields

                                      • A – square matrix
                                      • B – matrix
                                      source
                                      ConstrainedLinearContinuousSystem

                                      Continuous-time linear system with state constraints of the form

                                      \[x' = A x, x(t) ∈ \mathcal{X}.\]

                                      Fields

                                      • A – square matrix
                                      • X – state constraints
                                      source
                                      ConstrainedAffineContinuousSystem

                                      Continuous-time affine system with state constraints of the form

                                      \[x' = A x + b, x(t) ∈ \mathcal{X}.\]

                                      Fields

                                      • A – square matrix
                                      • b – vector
                                      • X – state constraints
                                      source
                                      ConstrainedAffineControlContinuousSystem

                                      Continuous-time affine control system with state constraints of the form

                                      \[x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

                                      and $c$ a vector.

                                      Fields

                                      • A – square matrix
                                      • B – matrix
                                      • c – vector
                                      • X – state constraints
                                      • U – input constraints
                                      source
                                      ConstrainedLinearControlContinuousSystem

                                      Continuous-time linear control system with state constraints of the form

                                      \[x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                                      Fields

                                      • A – square matrix
                                      • B – matrix
                                      • X – state constraints
                                      • U – input constraints
                                      source
                                      LinearAlgebraicContinuousSystem

                                      Continuous-time linear algebraic system of the form

                                      \[E x' = A x.\]

                                      Fields

                                      • A – matrix
                                      • E – matrix, same size as A
                                      source
                                      ConstrainedLinearAlgebraicContinuousSystem

                                      Continuous-time linear system with state constraints of the form

                                      \[E x' = A x, x(t) ∈ \mathcal{X}.\]

                                      Fields

                                      • A – matrix
                                      • E – matrix, same size as A
                                      • X – state constraints
                                      source
                                      PolynomialContinuousSystem

                                      Continuous-time polynomial system of the form

                                      \[x' = p(x).\]

                                      Fields

                                      • p – polynomial
                                      • statedim – number of state variables
                                      source
                                      ConstrainedPolynomialContinuousSystem

                                      Continuous-time polynomial system with state constraints,

                                      \[x' = p(x), x(t) ∈ \mathcal{X}\]

                                      Fields

                                      • p – polynomial
                                      • X – constraint set
                                      • statedim – number of state variables
                                      source

                                      Discrete Systems

                                      DiscreteIdentitySystem <: AbstractDiscreteSystem

                                      Trivial identity discrete-time system of the form

                                      \[x_{k+1} = x_k.\]
                                      source
                                      ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                      Trivial identity discrete-time system with state constraints of the form

                                      \[x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]
                                      source
                                      LinearDiscreteSystem

                                      Discrete-time linear system of the form

                                      \[x_{k+1} = A x_k.\]

                                      Fields

                                      • A – square matrix
                                      source
                                      LinearControlDiscreteSystem

                                      Discrete-time linear control system of the form

                                      \[x_{k+1} = A x_k + B u_k.\]

                                      Fields

                                      • A – square matrix
                                      • B – matrix
                                      source
                                      ConstrainedLinearDiscreteSystem

                                      Discrete-time linear system with state constraints of the form

                                      \[x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                      Fields

                                      • A – square matrix
                                      • X – state constraints
                                      source
                                      ConstrainedLinearControlDiscreteSystem

                                      Discrete-time linear control system with state constraints of the form

                                      \[x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                                      Fields

                                      • A – square matrix
                                      • B – matrix
                                      • X – state constraints
                                      • U – input constraints
                                      source
                                      LinearAlgebraicDiscreteSystem

                                      Discrete-time linear algebraic system of the form

                                      \[E x_{k+1} = A x_k.\]

                                      Fields

                                      • A – matrix
                                      • E – matrix, same size as A
                                      source
                                      ConstrainedLinearAlgebraicDiscreteSystem

                                      Discrete-time linear system with state constraints of the form

                                      \[E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                      Fields

                                      • A – matrix
                                      • E – matrix, same size as A
                                      • X – state constraints
                                      source
                                      PolynomialDiscreteSystem

                                      Discrete-time polynomial system of the form

                                      \[x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                      Fields

                                      • p – polynomial
                                      • statedim – number of state variables
                                      source
                                      ConstrainedPolynomialDiscreteSystem

                                      Discrete-time polynomial system with state constraints,

                                      \[x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                      Fields

                                      • p – polynomial
                                      • X – constraint set
                                      • statedim – number of state variables
                                      source

                                      Initial Value Problems

                                      InitialValueProblem

                                      Parametric composite type for initial value problems. It is parameterized in the system's type.

                                      Fields

                                      • s – system
                                      • x0 – initial state

                                      Examples

                                      The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

                                      julia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);
                                      +
                                      +julia> p.x0
                                      +2-element Array{Float64,1}:
                                      + -0.5
                                      +  0.5
                                      +
                                      +julia> statedim(p)
                                      +2
                                      +
                                      +julia> inputdim(p)
                                      +0
                                      source
                                      IVP

                                      IVP is an alias for InitialValueProblem.

                                      source

                                      Input Types

                                      AbstractInput

                                      Abstract supertype for all input types.

                                      Notes

                                      The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                      Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                      A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                      source
                                      ConstantInput{UT} <: AbstractInput

                                      Type representing an input that remains constant in time.

                                      Fields

                                      • U – input set

                                      Examples

                                      The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                      julia> c = ConstantInput(-1//2)
                                      +ConstantInput{Rational{Int64}}(-1//2)
                                      +
                                      +julia> iterate(c, 1)
                                      +(-1//2, nothing)
                                      +
                                      +julia> iterate(c, 2)
                                      +(-1//2, nothing)
                                      +
                                      +julia> collect(nextinput(c, 4))
                                      +4-element Array{Rational{Int64},1}:
                                      + -1//2
                                      + -1//2
                                      + -1//2
                                      + -1//2

                                      The elements of this input are rational numbers:

                                      julia> eltype(c)
                                      +Rational{Int64}

                                      To transform a constant input, you can use map as in:

                                      julia> map(x->2*x, c)
                                      +ConstantInput{Rational{Int64}}(-1//1)
                                      source
                                      VaryingInput{UT} <: AbstractInput

                                      Type representing an input that may vary with time.

                                      Fields

                                      • U – vector of input sets

                                      Examples

                                      The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                      julia> v = VaryingInput([-1//2, 1//2])
                                      +VaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])
                                      +
                                      +julia> length(v)
                                      +2
                                      +
                                      +julia> eltype(v)
                                      +Rational{Int64}

                                      Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                      julia> iterate(v, 1)
                                      +(-1//2, 2)
                                      +
                                      +julia> iterate(v, 2)
                                      +(1//2, 3)

                                      The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                      julia> typeof(nextinput(v))
                                      +Base.Iterators.Take{VaryingInput{Rational{Int64}}}
                                      +
                                      +julia> collect(nextinput(v, 1))
                                      +1-element Array{Rational{Int64},1}:
                                      + -1//2
                                      +
                                      +julia> collect(nextinput(v, 2))
                                      +2-element Array{Rational{Int64},1}:
                                      + -1//2
                                      +  1//2

                                      You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                      julia> collect(v)
                                      +2-element Array{Rational{Int64},1}:
                                      + -1//2
                                      +  1//2
                                      +
                                      +julia> [2*vi for vi in v]
                                      +2-element Array{Rational{Int64},1}:
                                      + -1//1
                                      +  1//1

                                      Since this input type is finite, querying more elements than its length returns the full vector:

                                      julia> collect(nextinput(v, 4))
                                      +2-element Array{Rational{Int64},1}:
                                      + -1//2
                                      +  1//2

                                      To transform a varying input, you can use map as in:

                                      julia> map(x->2*x, v)
                                      +VaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])
                                      source

                                      Maps

                                      AbstractMap

                                      Abstract supertype for all map types.

                                      source
                                      LinearMap

                                      A linear map

                                      \[x ↦ Ax\]

                                      Fields

                                      • A – matrix
                                      source
                                      AffineMap

                                      An affine map

                                      \[x ↦ Ax + b\]

                                      Fields

                                      • A – matrix
                                      • b – vector
                                      source
                                      LinearControlMap

                                      A linear control map

                                      \[x ↦ Ax + Bu.\]

                                      Fields

                                      • A – matrix
                                      • B – matrix
                                      source
                                      ConstrainedLinearControlMap

                                      A linear control map with input constraints,

                                      \[x ↦ Ax + Bu, u ∈ \mathcal{U}.\]

                                      Fields

                                      • A – matrix
                                      • B – matrix
                                      • U – input constraints
                                      source
                                      AffineControlMap

                                      An affine control map

                                      \[x ↦ Ax + Bu + c.\]

                                      Fields

                                      • A – matrix
                                      • B – matrix
                                      • c – vector
                                      source
                                      ConstrainedAffineControlMap

                                      An affine control map with input constraints,

                                      \[x ↦ Ax + Bu + c, u ∈ \mathcal{U}.\]

                                      Fields

                                      • A – matrix
                                      • B – matrix
                                      • c – vector
                                      • U – input constraints
                                      source

                                      Systems with output

                                      SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                                      Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                      Fields

                                      • s – system of type ST
                                      • outputmap – output map of type MT
                                      source
                                      LinearTimeInvariantSystem(A, B, C, D)

                                      A linear time-invariant system with of the form

                                      \[x' = Ax + Bu,\ +y = Cx + Du.\]

                                      Input

                                      • A – matrix
                                      • B – matrix
                                      • C – matrix
                                      • D – matrix

                                      Output

                                      A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                      source
                                      LinearTimeInvariantSystem(A, B, C, D, X, U)

                                      A linear time-invariant system with state and input constraints of the form

                                      \[x' = Ax + Bu,\ +y = Cx + Du,\]

                                      where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                      Input

                                      • A – matrix
                                      • B – matrix
                                      • C – matrix
                                      • D – matrix
                                      • X – state constraints
                                      • U – input constraints

                                      Output

                                      A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                      source
                                      LTISystem

                                      LTISystem is an alias for LinearTimeInvariantSystem.

                                      source
                                      diff --git a/v0.3.0/search.html b/v0.3.0/search.html new file mode 100644 index 00000000..c2092db7 --- /dev/null +++ b/v0.3.0/search.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                      Search

                                      Search

                                      Number of results: loading...

                                        diff --git a/v0.3.0/search_index.js b/v0.3.0/search_index.js new file mode 100644 index 00000000..cfc32ec3 --- /dev/null +++ b/v0.3.0/search_index.js @@ -0,0 +1,595 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "index.html#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "index.html#MathematicalSystems.jl-1", + "page": "Home", + "title": "MathematicalSystems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]MathematicalSystems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "index.html#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled,linear algebraic, etc.Iterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "index.html#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types.html#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types.html#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in MathematicalSystems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form\n\nx = 0\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form\n\nx = 0 x(t) mathcalX\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form\n\nx = A x\n\nFields\n\nA – square matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AffineContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AffineContinuousSystem", + "category": "type", + "text": "AffineContinuousSystem\n\nContinuous-time affine system of the form\n\nx = A x + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form\n\nx = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nx = A x x(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedAffineContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineContinuousSystem", + "category": "type", + "text": "ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form\n\nx = A x + b x(t) mathcalX\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedAffineControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlContinuousSystem", + "category": "type", + "text": "ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form\n\nx = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form\n\nx = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form\n\nE x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form\n\nE x = A x x(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.PolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialContinuousSystem", + "category": "type", + "text": "PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form\n\nx = p(x)\n\nFields\n\np – polynomial\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "category": "type", + "text": "ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints,\n\nx = p(x) x(t) mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.DiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form\n\nx_k+1 = x_k\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form\n\nx_k+1 = x_k x_k mathcalX\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form\n\nx_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form\n\nx_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nx_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form\n\nx_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form\n\nE x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form\n\nE x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.PolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialDiscreteSystem", + "category": "type", + "text": "PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form\n\nx_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "category": "type", + "text": "ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints,\n\nx_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem" +}, + +{ + "location": "lib/types.html#MathematicalSystems.InitialValueProblem", + "page": "Types", + "title": "MathematicalSystems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.IVP", + "page": "Types", + "title": "MathematicalSystems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractInput", + "page": "Types", + "title": "MathematicalSystems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstantInput", + "page": "Types", + "title": "MathematicalSystems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.VaryingInput", + "page": "Types", + "title": "MathematicalSystems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AbstractMap", + "page": "Types", + "title": "MathematicalSystems.AbstractMap", + "category": "type", + "text": "AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearMap", + "page": "Types", + "title": "MathematicalSystems.LinearMap", + "category": "type", + "text": "LinearMap\n\nA linear map\n\nx Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AffineMap", + "page": "Types", + "title": "MathematicalSystems.AffineMap", + "category": "type", + "text": "AffineMap\n\nAn affine map\n\nx Ax + b\n\nFields\n\nA – matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearControlMap", + "page": "Types", + "title": "MathematicalSystems.LinearControlMap", + "category": "type", + "text": "LinearControlMap\n\nA linear control map\n\nx Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedLinearControlMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlMap", + "category": "type", + "text": "ConstrainedLinearControlMap\n\nA linear control map with input constraints,\n\nx Ax + Bu u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.AffineControlMap", + "page": "Types", + "title": "MathematicalSystems.AffineControlMap", + "category": "type", + "text": "AffineControlMap\n\nAn affine control map\n\nx Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.ConstrainedAffineControlMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlMap", + "category": "type", + "text": "ConstrainedAffineControlMap\n\nAn affine control map with input constraints,\n\nx Ax + Bu + c u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Maps-1", + "page": "Types", + "title": "Maps", + "category": "section", + "text": "AbstractMap\nLinearMap\nAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap" +}, + +{ + "location": "lib/types.html#MathematicalSystems.SystemWithOutput", + "page": "Types", + "title": "MathematicalSystems.SystemWithOutput", + "category": "type", + "text": "SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system\'s type (ST) and in the map\'s type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LinearTimeInvariantSystem", + "page": "Types", + "title": "MathematicalSystems.LinearTimeInvariantSystem", + "category": "function", + "text": "LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#MathematicalSystems.LTISystem", + "page": "Types", + "title": "MathematicalSystems.LTISystem", + "category": "function", + "text": "LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types.html#Systems-with-output-1", + "page": "Types", + "title": "Systems with output", + "category": "section", + "text": "SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem" +}, + +{ + "location": "lib/methods.html#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods.html#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in MathematicalSystems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.statedim", + "page": "Methods", + "title": "MathematicalSystems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.stateset", + "page": "Methods", + "title": "MathematicalSystems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputdim", + "page": "Methods", + "title": "MathematicalSystems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.inputset", + "page": "Methods", + "title": "MathematicalSystems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.nextinput", + "page": "Methods", + "title": "MathematicalSystems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.outputdim", + "page": "Methods", + "title": "MathematicalSystems.outputdim", + "category": "function", + "text": "outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#MathematicalSystems.outputmap", + "page": "Methods", + "title": "MathematicalSystems.outputmap", + "category": "function", + "text": "outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods.html#Output-1", + "page": "Methods", + "title": "Output", + "category": "section", + "text": "outputdim\noutputmap" +}, + +{ + "location": "about.html#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about.html#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about.html#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about.html#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about.html#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"MathematicalSystems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about.html#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about.html#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about.html#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to MathematicalSystems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/v0.3.0/siteinfo.js b/v0.3.0/siteinfo.js new file mode 100644 index 00000000..bcac4fe6 --- /dev/null +++ b/v0.3.0/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.3.0"; diff --git a/v0.6 b/v0.6 new file mode 120000 index 00000000..af537942 --- /dev/null +++ b/v0.6 @@ -0,0 +1 @@ +v0.6.4 \ No newline at end of file diff --git a/v0.6.1/about/index.html b/v0.6.1/about/index.html new file mode 100644 index 00000000..f7e18c8d --- /dev/null +++ b/v0.6.1/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                        About

                                        About

                                        This page contains some general information about this project, and recommendations about contributing.

                                        Contributing

                                        If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                        Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                        Branches and pull requests (PR)

                                        We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                        Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                        Unit testing and continuous integration (CI)

                                        This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                        When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                        $ julia --color=yes test/runtests.jl

                                        Alternatively, you can achieve the same from inside the REPL using the following command:

                                        julia> Pkg.test("MathematicalSystems")

                                        We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                        Contributing to the documentation

                                        New functions and types should be documented according to our guidelines directly in the source code.

                                        You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                        julia> ?LinearContinuousSystem

                                        This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                        To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                        $ julia --color=yes docs/make.jl

                                        Note that this also runs all doctests which will take some time.

                                        Related projects

                                        This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                        Below we list more related projects.

                                        Package nameDescription
                                        HybridSystems.jlHybrid Systems definitions in Julia.
                                        LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                        ControlToolbox.jlAnalysis and design tools for control systems.
                                        ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                        DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                        ControlSystems.jlA Control Systems Toolbox for Julia
                                        ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                        Credits

                                        These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                        diff --git a/v0.6.1/assets/arrow.svg b/v0.6.1/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.6.1/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.6.1/assets/documenter.css b/v0.6.1/assets/documenter.css new file mode 100644 index 00000000..7cd26628 --- /dev/null +++ b/v0.6.1/assets/documenter.css @@ -0,0 +1,601 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                        the is very first thing on the page (i.e. the second element + * in the
                                        , * after the
                                        , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                         surrounding the , while
                                        + * highlight.js applies the .hljs style directly to the  tag.
                                        + */
                                        +.hljs {
                                        +    background-color: transparent;
                                        +    padding: 0;
                                        +}
                                        +
                                        +@media only screen and (max-width: 768px) {
                                        +    nav.toc {
                                        +        position: fixed;
                                        +        width: 16em;
                                        +        left: -16em;
                                        +        -webkit-overflow-scrolling: touch;
                                        +        -webkit-transition-property: left; /* Safari */
                                        +        -webkit-transition-duration: 0.3s; /* Safari */
                                        +        transition-property: left;
                                        +        transition-duration: 0.3s;
                                        +        -webkit-transition-timing-function: ease-out; /* Safari */
                                        +        transition-timing-function: ease-out;
                                        +        z-index: 2;
                                        +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                                        +    }
                                        +
                                        +    nav.toc.show {
                                        +        left: 0;
                                        +    }
                                        +
                                        +    article {
                                        +        margin-left: 0;
                                        +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                        +        overflow-wrap: break-word;
                                        +    }
                                        +
                                        +    article > header {
                                        +        position: fixed;
                                        +        left: 0;
                                        +        z-index: 1;
                                        +    }
                                        +
                                        +    article > header nav, hr {
                                        +        display: none;
                                        +    }
                                        +
                                        +    article > header div#topbar {
                                        +        display: block; /* is mobile */
                                        +        position: fixed;
                                        +        width: 100%;
                                        +        height: 1.5em;
                                        +        padding-top: 1em;
                                        +        padding-bottom: 1em;
                                        +        background-color: #fcfcfc;
                                        +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                        +        top: 0;
                                        +        -webkit-transition-property: top; /* Safari */
                                        +        -webkit-transition-duration: 0.3s; /* Safari */
                                        +        transition-property: top;
                                        +        transition-duration: 0.3s;
                                        +    }
                                        +
                                        +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                        +        top: -4em;
                                        +        -webkit-transition-property: top; /* Safari */
                                        +        -webkit-transition-duration: 0.7s; /* Safari */
                                        +        transition-property: top;
                                        +        transition-duration: 0.7s;
                                        +    }
                                        +
                                        +    article > header div#topbar span {
                                        +        width: 80%;
                                        +        height: 1.5em;
                                        +        margin-top: -0.1em;
                                        +        margin-left: 0.9em;
                                        +        font-size: 1.2em;
                                        +        overflow: hidden;
                                        +    }
                                        +
                                        +    article > header div#topbar a.fa-bars {
                                        +        float: right;
                                        +        padding: 0.6em;
                                        +        margin-top: -0.6em;
                                        +        margin-right: 0.3em;
                                        +        font-size: 1.5em;
                                        +    }
                                        +
                                        +    article > header div#topbar a.fa-bars:visited {
                                        +        color: #3091d1;
                                        +    }
                                        +
                                        +    article table {
                                        +        overflow-x: auto;
                                        +        display: block;
                                        +    }
                                        +
                                        +    article div.MathJax_Display {
                                        +        overflow: scroll;
                                        +    }
                                        +
                                        +    article span.MathJax {
                                        +        overflow: hidden;
                                        +    }
                                        +}
                                        +
                                        +@media only screen and (max-width: 320px) {
                                        +    body {
                                        +        font-size: 15px;
                                        +    }
                                        +}
                                        diff --git a/v0.6.1/assets/documenter.js b/v0.6.1/assets/documenter.js
                                        new file mode 100644
                                        index 00000000..761ae294
                                        --- /dev/null
                                        +++ b/v0.6.1/assets/documenter.js
                                        @@ -0,0 +1,132 @@
                                        +/*
                                        + * Part of Documenter.jl
                                        + *     https://github.com/JuliaDocs/Documenter.jl
                                        + *
                                        + * License: MIT
                                        + */
                                        +
                                        +requirejs.config({
                                        +    paths: {
                                        +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                        +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                        +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                        +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                        +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                        +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                        +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                        +    },
                                        +    shim: {
                                        +        'mathjax' : {
                                        +            exports: "MathJax"
                                        +        },
                                        +        'highlight-julia': ['highlight'],
                                        +        'highlight-julia-repl': ['highlight'],
                                        +    }
                                        +});
                                        +
                                        +// Load MathJax
                                        +require(['mathjax'], function(MathJax) {
                                        +    MathJax.Hub.Config({
                                        +      "tex2jax": {
                                        +        inlineMath: [['$','$'], ['\\(','\\)']],
                                        +        processEscapes: true
                                        +      }
                                        +    });
                                        +    MathJax.Hub.Config({
                                        +      config: ["MMLorHTML.js"],
                                        +      jax: [
                                        +        "input/TeX",
                                        +        "output/HTML-CSS",
                                        +        "output/NativeMML"
                                        +      ],
                                        +      extensions: [
                                        +        "MathMenu.js",
                                        +        "MathZoom.js",
                                        +        "TeX/AMSmath.js",
                                        +        "TeX/AMSsymbols.js",
                                        +        "TeX/autobold.js",
                                        +        "TeX/autoload-all.js"
                                        +      ]
                                        +    });
                                        +    MathJax.Hub.Config({
                                        +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                        +    });
                                        +})
                                        +
                                        +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                        +    $(document).ready(function() {
                                        +        hljs.initHighlighting();
                                        +    })
                                        +
                                        +})
                                        +
                                        +// update the version selector with info from the siteinfo.js and ../versions.js files
                                        +require(['jquery'], function($) {
                                        +    $(document).ready(function() {
                                        +        var version_selector = $("#version-selector");
                                        +
                                        +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                        +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                        +            var option = $("");
                                        +            version_selector.append(option);
                                        +        }
                                        +
                                        +        if (typeof DOC_VERSIONS !== 'undefined') {
                                        +            var existing_versions = $('#version-selector > option');
                                        +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                        +            DOC_VERSIONS.forEach(function(each) {
                                        +                var version_url = documenterBaseURL + "/../" + each;
                                        +                var existing_id = $.inArray(each, existing_versions_texts);
                                        +                // if not already in the version selector, add it as a new option,
                                        +                // otherwise update the old option with the URL and enable it
                                        +                if (existing_id == -1) {
                                        +                    var option = $("");
                                        +                    version_selector.append(option);
                                        +                } else {
                                        +                    var option = existing_versions[existing_id];
                                        +                    option.value = version_url;
                                        +                    option.disabled = false;
                                        +                }
                                        +            });
                                        +        }
                                        +
                                        +        // only show the version selector if the selector has been populated
                                        +        if ($('#version-selector > option').length > 0) {
                                        +            version_selector.css("visibility", "visible");
                                        +        }
                                        +
                                        +        // Scroll the navigation bar to the currently selected menu item
                                        +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                                        +    })
                                        +
                                        +})
                                        +
                                        +// mobile
                                        +require(['jquery', 'headroom'], function($, Headroom) {
                                        +    $(document).ready(function() {
                                        +        var navtoc = $("nav.toc");
                                        +        $("nav.toc li.current a.toctext").click(function() {
                                        +            navtoc.toggleClass('show');
                                        +        });
                                        +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                        +            ev.preventDefault();
                                        +            navtoc.toggleClass('show');
                                        +            if (navtoc.hasClass('show')) {
                                        +                var title = $("article > header div#topbar span").text();
                                        +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                        +            }
                                        +        });
                                        +        $("article#docs").bind('click', function(ev) {
                                        +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                        +                return;
                                        +            }
                                        +            if (navtoc.hasClass('show')) {
                                        +                navtoc.removeClass('show');
                                        +            }
                                        +        });
                                        +        if ($("article > header div#topbar").css('display') == 'block') {
                                        +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                        +            headroom.init();
                                        +        }
                                        +    })
                                        +})
                                        diff --git a/v0.6.1/assets/juliareach.css b/v0.6.1/assets/juliareach.css
                                        new file mode 100644
                                        index 00000000..64b0d92d
                                        --- /dev/null
                                        +++ b/v0.6.1/assets/juliareach.css
                                        @@ -0,0 +1,583 @@
                                        +/*
                                        + * The default CSS style for Documenter.jl generated sites
                                        + *
                                        + * Heavily inspired by the Julia Sphinx theme
                                        + *     https://github.com/JuliaLang/JuliaDoc
                                        + * which extends the sphinx_rtd_theme
                                        + *     https://github.com/snide/sphinx_rtd_theme
                                        + *
                                        + * Part of Documenter.jl
                                        + *     https://github.com/JuliaDocs/Documenter.jl
                                        + *
                                        + * License: MIT
                                        + */
                                        +
                                        +/* The original CSS is modified such that it right-justifies the text. */
                                        +
                                        +/* fonts */
                                        +body, input {
                                        +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                        +  font-size: 16px;
                                        +  color: #222;
                                        +  text-rendering: optimizeLegibility;
                                        +}
                                        +
                                        +pre, code, kbd {
                                        +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                        +  font-size: 0.90em;
                                        +}
                                        +
                                        +pre code {
                                        +  font-size: 1em;
                                        +}
                                        +
                                        +a {
                                        +    color: #2980b9;
                                        +    text-decoration: none;
                                        +}
                                        +
                                        +a:hover {
                                        +    color: #3091d1;
                                        +}
                                        +
                                        +a:visited {
                                        +    color: #9b59b6;
                                        +}
                                        +
                                        +body {
                                        +    line-height: 1.5;
                                        +}
                                        +
                                        +h1 {
                                        +    font-size: 1.75em;
                                        +}
                                        +
                                        +/* Unless the 

                                        the is very first thing on the page (i.e. the second element + * in the
                                        , * after the
                                        , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                         surrounding the , while
                                        + * highlight.js applies the .hljs style directly to the  tag.
                                        + */
                                        +.hljs {
                                        +    background-color: transparent;
                                        +    padding: 0;
                                        +}
                                        +
                                        +@media only screen and (max-width: 768px) {
                                        +    nav.toc {
                                        +        position: fixed;
                                        +        overflow-y: scroll;
                                        +        width: 16em;
                                        +        left: -16em;
                                        +        -webkit-overflow-scrolling: touch;
                                        +        -webkit-transition-property: left; /* Safari */
                                        +        -webkit-transition-duration: 0.3s; /* Safari */
                                        +        transition-property: left;
                                        +        transition-duration: 0.3s;
                                        +        -webkit-transition-timing-function: ease-out; /* Safari */
                                        +        transition-timing-function: ease-out;
                                        +        z-index: 2;
                                        +    }
                                        +
                                        +    nav.toc.show {
                                        +        left: 0;
                                        +    }
                                        +
                                        +    article {
                                        +        margin-left: 0;
                                        +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                        +        overflow-wrap: break-word;
                                        +    }
                                        +
                                        +    article > header {
                                        +        position: fixed;
                                        +        left: 0;
                                        +        z-index: 1;
                                        +    }
                                        +
                                        +    article > header nav, hr {
                                        +        display: none;
                                        +    }
                                        +
                                        +    article > header div#topbar {
                                        +        display: block; /* is mobile */
                                        +        position: fixed;
                                        +        width: 100%;
                                        +        height: 1.5em;
                                        +        padding-top: 1em;
                                        +        padding-bottom: 1em;
                                        +        background-color: #fcfcfc;
                                        +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                        +        top: 0;
                                        +        -webkit-transition-property: top; /* Safari */
                                        +        -webkit-transition-duration: 0.3s; /* Safari */
                                        +        transition-property: top;
                                        +        transition-duration: 0.3s;
                                        +    }
                                        +
                                        +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                        +        top: -4em;
                                        +        -webkit-transition-property: top; /* Safari */
                                        +        -webkit-transition-duration: 0.7s; /* Safari */
                                        +        transition-property: top;
                                        +        transition-duration: 0.7s;
                                        +    }
                                        +
                                        +    article > header div#topbar span {
                                        +        position: fixed;
                                        +        width: 80%;
                                        +        height: 1.5em;
                                        +        margin-top: -0.1em;
                                        +        margin-left: 0.9em;
                                        +        font-size: 1.2em;
                                        +        overflow: hidden;
                                        +    }
                                        +
                                        +    article > header div#topbar a.fa-bars {
                                        +        float: right;
                                        +        padding: 0.6em;
                                        +        margin-top: -0.6em;
                                        +        margin-right: 0.3em;
                                        +        font-size: 1.5em;
                                        +    }
                                        +
                                        +    article > header div#topbar a.fa-bars:visited {
                                        +        color: #3091d1;
                                        +    }
                                        +
                                        +    article table {
                                        +        overflow-x: auto;
                                        +        display: block;
                                        +    }
                                        +
                                        +    article div.MathJax_Display {
                                        +        overflow: scroll;
                                        +    }
                                        +
                                        +    article span.MathJax {
                                        +        overflow: hidden;
                                        +    }
                                        +}
                                        +
                                        +@media only screen and (max-width: 320px) {
                                        +    body {
                                        +        font-size: 15px;
                                        +    }
                                        +}
                                        diff --git a/v0.6.1/assets/search.js b/v0.6.1/assets/search.js
                                        new file mode 100644
                                        index 00000000..5d32c3aa
                                        --- /dev/null
                                        +++ b/v0.6.1/assets/search.js
                                        @@ -0,0 +1,250 @@
                                        +/*
                                        + * Part of Documenter.jl
                                        + *     https://github.com/JuliaDocs/Documenter.jl
                                        + *
                                        + * License: MIT
                                        + */
                                        +
                                        +// parseUri 1.2.2
                                        +// (c) Steven Levithan 
                                        +// MIT License
                                        +function parseUri (str) {
                                        +	var	o   = parseUri.options,
                                        +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                        +		uri = {},
                                        +		i   = 14;
                                        +
                                        +	while (i--) uri[o.key[i]] = m[i] || "";
                                        +
                                        +	uri[o.q.name] = {};
                                        +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                        +		if ($1) uri[o.q.name][$1] = $2;
                                        +	});
                                        +
                                        +	return uri;
                                        +};
                                        +parseUri.options = {
                                        +	strictMode: false,
                                        +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                        +	q:   {
                                        +		name:   "queryKey",
                                        +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                        +	},
                                        +	parser: {
                                        +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                        +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                        +	}
                                        +};
                                        +
                                        +requirejs.config({
                                        +    paths: {
                                        +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                        +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                                        +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                                        +    }
                                        +});
                                        +
                                        +var currentScript = document.currentScript;
                                        +
                                        +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                        +    $("#search-form").submit(function(e) {
                                        +        e.preventDefault()
                                        +    })
                                        +
                                        +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                        +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                        +    // ideally we'd just filter the original list but it's not available as a variable
                                        +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                        +        'a',
                                        +        'able',
                                        +        'about',
                                        +        'across',
                                        +        'after',
                                        +        'almost',
                                        +        'also',
                                        +        'am',
                                        +        'among',
                                        +        'an',
                                        +        'and',
                                        +        'are',
                                        +        'as',
                                        +        'at',
                                        +        'be',
                                        +        'because',
                                        +        'been',
                                        +        'but',
                                        +        'by',
                                        +        'can',
                                        +        'cannot',
                                        +        'could',
                                        +        'dear',
                                        +        'did',
                                        +        'does',
                                        +        'either',
                                        +        'ever',
                                        +        'every',
                                        +        'from',
                                        +        'got',
                                        +        'had',
                                        +        'has',
                                        +        'have',
                                        +        'he',
                                        +        'her',
                                        +        'hers',
                                        +        'him',
                                        +        'his',
                                        +        'how',
                                        +        'however',
                                        +        'i',
                                        +        'if',
                                        +        'into',
                                        +        'it',
                                        +        'its',
                                        +        'just',
                                        +        'least',
                                        +        'like',
                                        +        'likely',
                                        +        'may',
                                        +        'me',
                                        +        'might',
                                        +        'most',
                                        +        'must',
                                        +        'my',
                                        +        'neither',
                                        +        'no',
                                        +        'nor',
                                        +        'not',
                                        +        'of',
                                        +        'off',
                                        +        'often',
                                        +        'on',
                                        +        'only',
                                        +        'or',
                                        +        'other',
                                        +        'our',
                                        +        'own',
                                        +        'rather',
                                        +        'said',
                                        +        'say',
                                        +        'says',
                                        +        'she',
                                        +        'should',
                                        +        'since',
                                        +        'so',
                                        +        'some',
                                        +        'than',
                                        +        'that',
                                        +        'the',
                                        +        'their',
                                        +        'them',
                                        +        'then',
                                        +        'there',
                                        +        'these',
                                        +        'they',
                                        +        'this',
                                        +        'tis',
                                        +        'to',
                                        +        'too',
                                        +        'twas',
                                        +        'us',
                                        +        'wants',
                                        +        'was',
                                        +        'we',
                                        +        'were',
                                        +        'what',
                                        +        'when',
                                        +        'who',
                                        +        'whom',
                                        +        'why',
                                        +        'will',
                                        +        'would',
                                        +        'yet',
                                        +        'you',
                                        +        'your'
                                        +        ])
                                        +
                                        +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                        +    // would not find anything if searching for "add!", only for the entire qualification
                                        +    lunr.tokenizer.separator = /[\s\-\.]+/
                                        +
                                        +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                        +    lunr.trimmer = function (token) {
                                        +        return token.update(function (s) {
                                        +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                        +        })
                                        +    }
                                        +
                                        +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                        +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                        +
                                        +    var index = lunr(function () {
                                        +        this.ref('location')
                                        +        this.field('title')
                                        +        this.field('text')
                                        +        documenterSearchIndex['docs'].forEach(function(e) {
                                        +            this.add(e)
                                        +        }, this)
                                        +    })
                                        +    var store = {}
                                        +
                                        +    documenterSearchIndex['docs'].forEach(function(e) {
                                        +        store[e.location] = {title: e.title, category: e.category}
                                        +    })
                                        +
                                        +    $(function(){
                                        +        function update_search(querystring) {
                                        +            tokens = lunr.tokenizer(querystring)
                                        +            results = index.query(function (q) {
                                        +                tokens.forEach(function (t) {
                                        +                    q.term(t.toString(), {
                                        +                        fields: ["title"],
                                        +                        boost: 100,
                                        +                        usePipeline: false,
                                        +                        editDistance: 0,
                                        +                        wildcard: lunr.Query.wildcard.NONE
                                        +                    })
                                        +                    q.term(t.toString(), {
                                        +                        fields: ["title"],
                                        +                        boost: 10,
                                        +                        usePipeline: false,
                                        +                        editDistance: 2,
                                        +                        wildcard: lunr.Query.wildcard.NONE
                                        +                    })
                                        +                    q.term(t.toString(), {
                                        +                        fields: ["text"],
                                        +                        boost: 1,
                                        +                        usePipeline: true,
                                        +                        editDistance: 0,
                                        +                        wildcard: lunr.Query.wildcard.NONE
                                        +                    })
                                        +                })
                                        +            })
                                        +            $('#search-info').text("Number of results: " + results.length)
                                        +            $('#search-results').empty()
                                        +            results.forEach(function(result) {
                                        +                data = store[result.ref]
                                        +                link = $('')
                                        +                link.text(data.title)
                                        +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                        +                cat = $('('+data.category+')')
                                        +                li = $('
                                      • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.6.1/index.html b/v0.6.1/index.html new file mode 100644 index 00000000..52be2c2c --- /dev/null +++ b/v0.6.1/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                        Home

                                        MathematicalSystems.jl

                                        MathematicalSystems is a Julia package for mathematical systems interfaces.

                                        Features

                                        • Generic and flexible systems definitions, while being fast and type stable.
                                        • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                                        • Iterator interfaces to handle constant or time-varying inputs.

                                        Library Outline

                                        diff --git a/v0.6.1/lib/methods/index.html b/v0.6.1/lib/methods/index.html new file mode 100644 index 00000000..a3193e52 --- /dev/null +++ b/v0.6.1/lib/methods/index.html @@ -0,0 +1,2 @@ + +Methods · MathematicalSystems.jl

                                        Methods

                                        Methods

                                        This section describes systems methods implemented in MathematicalSystems.jl.

                                        States

                                        statedim(s::AbstractSystem)

                                        Returns the dimension of the state space of system s.

                                        source
                                        stateset(s::AbstractSystem)

                                        Returns the set of allowed states of system s.

                                        source

                                        Inputs

                                        inputdim(s::AbstractSystem)

                                        Returns the dimension of the input space of system s.

                                        source
                                        inputset(s::AbstractSystem)

                                        Returns the set of allowed inputs of system s.

                                        source
                                        nextinput(input::ConstantInput, n::Int=1)

                                        Returns the first n elements of this input.

                                        Input

                                        • input – a constant input
                                        • n – (optional, default: 1) the number of desired elements

                                        Output

                                        A repeated iterator that generates n equal samples of this input.

                                        source
                                        nextinput(input::VaryingInput, n::Int=1)

                                        Returns the first n elements of this input.

                                        Input

                                        • input – varying input
                                        • n – (optional, default: 1) number of desired elements

                                        Output

                                        An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                        source

                                        Output

                                        outputdim(m::AbstractMap)

                                        Returns the dimension of the output space of the map m.

                                        source
                                        outputmap(s::SystemWithOutput)

                                        Returns the output map of a system with output.

                                        source

                                        Traits

                                        islinear(s::AbstractSystem)

                                        Specifies if the dynamics of system s is specified by linear equations.

                                        Notes

                                        We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                                        This function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                                        [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                                        source
                                        islinear(m::AbstractMap)

                                        Specifies if the map m is linear or not.

                                        Notes

                                        A map is linear if it preserves the operations of scalar multiplication and vector addition.

                                        source
                                        isaffine(s::AbstractSystem)

                                        Specifies if the dynamics of system s is specified by affine equations.

                                        Notes

                                        An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                                        This function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                                        source
                                        isaffine(m::AbstractMap)

                                        Specifies if the map m is affine or not.

                                        Notes

                                        An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                                        source

                                        Maps

                                        apply(m::AbstractMap, args...)

                                        Apply the rule specified by the map to the given arguments.

                                        source
                                        diff --git a/v0.6.1/lib/types/index.html b/v0.6.1/lib/types/index.html new file mode 100644 index 00000000..3953b07d --- /dev/null +++ b/v0.6.1/lib/types/index.html @@ -0,0 +1,83 @@ + +Types · MathematicalSystems.jl

                                        Types

                                        Types

                                        This section describes systems types implemented in MathematicalSystems.jl.

                                        Abstract Systems

                                        AbstractSystem

                                        Abstract supertype for all system types.

                                        source
                                        AbstractContinuousSystem

                                        Abstract supertype for all continuous system types.

                                        source
                                        AbstractDiscreteSystem

                                        Abstract supertype for all discrete system types.

                                        source

                                        Continuous Systems

                                        ContinuousIdentitySystem <: AbstractContinuousSystem

                                        Trivial identity continuous-time system of the form:

                                        \[ x' = 0.\]

                                        Fields

                                        • statedim – number of state variables
                                        source
                                        ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                        Trivial identity continuous-time system with state constraints of the form:

                                        \[ x' = 0, x(t) ∈ \mathcal{X}.\]

                                        Fields

                                        • statedim – number of state variables
                                        • X – state constraints
                                        source
                                        LinearContinuousSystem

                                        Continuous-time linear system of the form:

                                        \[ x' = A x.\]

                                        Fields

                                        • A – square matrix
                                        source
                                        AffineContinuousSystem

                                        Continuous-time affine system of the form:

                                        \[ x' = A x + b.\]

                                        Fields

                                        • A – square matrix
                                        • b – vector
                                        source
                                        LinearControlContinuousSystem

                                        Continuous-time linear control system of the form:

                                        \[ x' = A x + B u.\]

                                        Fields

                                        • A – square matrix
                                        • B – matrix
                                        source
                                        ConstrainedLinearContinuousSystem

                                        Continuous-time linear system with state constraints of the form:

                                        \[ x' = A x, x(t) ∈ \mathcal{X}.\]

                                        Fields

                                        • A – square matrix
                                        • X – state constraints
                                        source
                                        ConstrainedAffineContinuousSystem

                                        Continuous-time affine system with state constraints of the form:

                                        \[ x' = A x + b, x(t) ∈ \mathcal{X}.\]

                                        Fields

                                        • A – square matrix
                                        • b – vector
                                        • X – state constraints
                                        source
                                        ConstrainedAffineControlContinuousSystem

                                        Continuous-time affine control system with state constraints of the form:

                                        \[ x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

                                        and $c$ a vector.

                                        Fields

                                        • A – square matrix
                                        • B – matrix
                                        • c – vector
                                        • X – state constraints
                                        • U – input constraints
                                        source
                                        ConstrainedLinearControlContinuousSystem

                                        Continuous-time linear control system with state constraints of the form:

                                        \[ x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                                        Fields

                                        • A – square matrix
                                        • B – matrix
                                        • X – state constraints
                                        • U – input constraints
                                        source
                                        LinearAlgebraicContinuousSystem

                                        Continuous-time linear algebraic system of the form:

                                        \[ E x' = A x.\]

                                        Fields

                                        • A – matrix
                                        • E – matrix, same size as A
                                        source
                                        ConstrainedLinearAlgebraicContinuousSystem

                                        Continuous-time linear system with state constraints of the form:

                                        \[ E x' = A x, x(t) ∈ \mathcal{X}.\]

                                        Fields

                                        • A – matrix
                                        • E – matrix, same size as A
                                        • X – state constraints
                                        source
                                        PolynomialContinuousSystem

                                        Continuous-time polynomial system of the form:

                                        \[ x' = p(x).\]

                                        Fields

                                        • p – polynomial vector field
                                        • statedim – number of state variables
                                        source
                                        ConstrainedPolynomialContinuousSystem

                                        Continuous-time polynomial system with state constraints:

                                        \[ x' = p(x), x(t) ∈ \mathcal{X}\]

                                        Fields

                                        • p – polynomial vector field
                                        • X – constraint set
                                        • statedim – number of state variables
                                        source

                                        Discrete Systems

                                        DiscreteIdentitySystem <: AbstractDiscreteSystem

                                        Trivial identity discrete-time system of the form:

                                        \[ x_{k+1} = x_k.\]

                                        Fields

                                        • statedim – number of state variables
                                        source
                                        ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                        Trivial identity discrete-time system with state constraints of the form:

                                        \[ x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]

                                        Fields

                                        • statedim – number of state variables
                                        • X – state constraints
                                        source
                                        LinearDiscreteSystem

                                        Discrete-time linear system of the form:

                                        \[ x_{k+1} = A x_k.\]

                                        Fields

                                        • A – square matrix
                                        source
                                        AffineDiscreteSystem

                                        Discrete-time affine system of the form:

                                        \[ x_{k+1} = A x_k + b.\]

                                        Fields

                                        • A – square matrix
                                        • b – vector
                                        source
                                        LinearControlDiscreteSystem

                                        Discrete-time linear control system of the form:

                                        \[ x_{k+1} = A x_k + B u_k.\]

                                        Fields

                                        • A – square matrix
                                        • B – matrix
                                        source
                                        ConstrainedLinearDiscreteSystem

                                        Discrete-time linear system with state constraints of the form:

                                        \[ x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                        Fields

                                        • A – square matrix
                                        • X – state constraints
                                        source
                                        ConstrainedAffineDiscreteSystem

                                        Discrete-time affine system with state constraints of the form:

                                        \[ x_{k+1} = A x_k + b, x_k ∈ \mathcal{X} \text{ for all } k.\]

                                        Fields

                                        • A – square matrix
                                        • b – vector
                                        • X – state constraints
                                        source
                                        ConstrainedLinearControlDiscreteSystem

                                        Discrete-time linear control system with state constraints of the form:

                                        \[ x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                                        Fields

                                        • A – square matrix
                                        • B – matrix
                                        • X – state constraints
                                        • U – input constraints
                                        source
                                        ConstrainedAffineControlDiscreteSystem

                                        Continuous-time affine control system with state constraints of the form:

                                        \[ x_{k+1} = A x+k + B u_k + c, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k,\]

                                        and $c$ a vector.

                                        Fields

                                        • A – square matrix
                                        • B – matrix
                                        • c – vector
                                        • X – state constraints
                                        • U – input constraints
                                        source
                                        LinearAlgebraicDiscreteSystem

                                        Discrete-time linear algebraic system of the form:

                                        \[ E x_{k+1} = A x_k.\]

                                        Fields

                                        • A – matrix
                                        • E – matrix, same size as A
                                        source
                                        ConstrainedLinearAlgebraicDiscreteSystem

                                        Discrete-time linear system with state constraints of the form:

                                        \[ E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                        Fields

                                        • A – matrix
                                        • E – matrix, same size as A
                                        • X – state constraints
                                        source
                                        PolynomialDiscreteSystem

                                        Discrete-time polynomial system of the form:

                                        \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                        Fields

                                        • p – polynomial vector field
                                        • statedim – number of state variables
                                        source
                                        ConstrainedPolynomialDiscreteSystem

                                        Discrete-time polynomial system with state constraints:

                                        \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                        Fields

                                        • p – polynomial
                                        • X – constraint set
                                        • statedim – number of state variables
                                        source

                                        Identity operator

                                        IdentityMultiple{T} < AbstractMatrix{T} where T

                                        A scalar multiple of the identity matrix of given order and numeric type.

                                        Fields

                                        • M – uniform scaling operator of type T
                                        • n – size of the identity matrix

                                        Notes

                                        This is a wrapper type around Julia's lazy multiple of the identity operator, UniformScaling, such that IdentityMultiple can be used where abstract matrix is needed for dispatch. The difference between UniformScaling and a IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                                        Examples

                                        julia> import MathematicalSystems.IdentityMultiple
                                        +
                                        +julia> I2 = IdentityMultiple(1.0*I, 2)
                                        +Scalar multiple of the identity matrix of order 2:
                                        +   UniformScaling{Float64}
                                        +1.0*I
                                        +
                                        +julia> I2 + I2
                                        +Scalar multiple of the identity matrix of order 2:
                                        +   UniformScaling{Float64}
                                        +2.0*I
                                        +
                                        +julia> 10.0 * I2
                                        +Scalar multiple of the identity matrix of order 2:
                                        +   UniformScaling{Float64}
                                        +10.0*I
                                        source

                                        Initial Value Problems

                                        InitialValueProblem

                                        Parametric composite type for initial value problems. It is parameterized in the system's type.

                                        Fields

                                        • s – system
                                        • x0 – initial state

                                        Examples

                                        The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

                                        julia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);
                                        +
                                        +julia> p.x0
                                        +2-element Array{Float64,1}:
                                        + -0.5
                                        +  0.5
                                        +
                                        +julia> statedim(p)
                                        +2
                                        +
                                        +julia> inputdim(p)
                                        +0
                                        source
                                        IVP

                                        IVP is an alias for InitialValueProblem.

                                        source

                                        Input Types

                                        AbstractInput

                                        Abstract supertype for all input types.

                                        Notes

                                        The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                        Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                        A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                        source
                                        ConstantInput{UT} <: AbstractInput

                                        Type representing an input that remains constant in time.

                                        Fields

                                        • U – input set

                                        Examples

                                        The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                        julia> c = ConstantInput(-1//2)
                                        +ConstantInput{Rational{Int64}}(-1//2)
                                        +
                                        +julia> iterate(c, 1)
                                        +(-1//2, nothing)
                                        +
                                        +julia> iterate(c, 2)
                                        +(-1//2, nothing)
                                        +
                                        +julia> collect(nextinput(c, 4))
                                        +4-element Array{Rational{Int64},1}:
                                        + -1//2
                                        + -1//2
                                        + -1//2
                                        + -1//2

                                        The elements of this input are rational numbers:

                                        julia> eltype(c)
                                        +Rational{Int64}

                                        To transform a constant input, you can use map as in:

                                        julia> map(x->2*x, c)
                                        +ConstantInput{Rational{Int64}}(-1//1)
                                        source
                                        VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                                        Type representing an input that may vary with time.

                                        Fields

                                        • U – vector of input sets

                                        Examples

                                        The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                        julia> v = VaryingInput([-1//2, 1//2])
                                        +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                                        +
                                        +julia> length(v)
                                        +2
                                        +
                                        +julia> eltype(v)
                                        +Rational{Int64}

                                        Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                        julia> iterate(v, 1)
                                        +(-1//2, 2)
                                        +
                                        +julia> iterate(v, 2)
                                        +(1//2, 3)

                                        The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                        julia> typeof(nextinput(v))
                                        +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                                        +
                                        +julia> collect(nextinput(v, 1))
                                        +1-element Array{Rational{Int64},1}:
                                        + -1//2
                                        +
                                        +julia> collect(nextinput(v, 2))
                                        +2-element Array{Rational{Int64},1}:
                                        + -1//2
                                        +  1//2

                                        You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                        julia> collect(v)
                                        +2-element Array{Rational{Int64},1}:
                                        + -1//2
                                        +  1//2
                                        +
                                        +julia> [2*vi for vi in v]
                                        +2-element Array{Rational{Int64},1}:
                                        + -1//1
                                        +  1//1

                                        Since this input type is finite, querying more elements than its length returns the full vector:

                                        julia> collect(nextinput(v, 4))
                                        +2-element Array{Rational{Int64},1}:
                                        + -1//2
                                        +  1//2

                                        To transform a varying input, you can use map as in:

                                        julia> map(x->2*x, v)
                                        +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                                        source

                                        Maps

                                        AbstractMap

                                        Abstract supertype for all map types.

                                        source
                                        IdentityMap

                                        An identity map,

                                        \[ x ↦ x.\]

                                        Fields

                                        • dim – dimension
                                        source
                                        ConstrainedIdentityMap

                                        An identity map with state constraints of the form:

                                        \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                                        Fields

                                        • dim – dimension
                                        • X – state constraints
                                        source
                                        LinearMap

                                        A linear map,

                                        \[ x ↦ Ax\]

                                        Fields

                                        • A – matrix
                                        source
                                        ConstrainedLinearMap

                                        A linear map with state constraints of the form:

                                        \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                                        Fields

                                        • A – matrix
                                        • X – state constraints
                                        source
                                        AffineMap

                                        An affine map,

                                        \[ x ↦ Ax + b.\]

                                        Fields

                                        • A – matrix
                                        • b – vector
                                        source
                                        ConstrainedAffineMap

                                        An affine map with state constraints of the form:

                                        \[ x ↦ Ax + b, x(t) ∈ \mathcal{X}.\]

                                        Fields

                                        • A – matrix
                                        • b – vector
                                        • X – state constraints
                                        source
                                        LinearControlMap

                                        A linear control map,

                                        \[ (x, u) ↦ Ax + Bu.\]

                                        Fields

                                        • A – matrix
                                        • B – matrix
                                        source
                                        ConstrainedLinearControlMap

                                        A linear control map with state and input constraints,

                                        \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                        Fields

                                        • A – matrix
                                        • B – matrix
                                        • X – state constraints
                                        • U – input constraints
                                        source
                                        AffineControlMap

                                        An affine control map,

                                        \[ (x, u) ↦ Ax + Bu + c.\]

                                        Fields

                                        • A – matrix
                                        • B – matrix
                                        • c – vector
                                        source
                                        ConstrainedAffineControlMap

                                        An affine control map with state and input constraints,

                                        \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                        Fields

                                        • A – matrix
                                        • B – matrix
                                        • c – vector
                                        • X – state constraints
                                        • U – input constraints
                                        source
                                        ResetMap

                                        A reset map,

                                        \[ x ↦ R(x),\]

                                        such that a subset of the variables is given a specified value, and the rest are unchanged.

                                        Fields

                                        • dim – dimension
                                        • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                        source
                                        ConstrainedResetMap

                                        A reset map with state constraints of the form:

                                        \[ x ↦ R(x), x ∈ \mathcal{X},\]

                                        such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                                        Fields

                                        • dim – dimension
                                        • X – state constraints
                                        • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                        source

                                        Macros

                                        map(ex, args)

                                        Returns an instance of the map type corresponding to the given expression.

                                        Input

                                        • ex – an expression defining the map, in the form of an anonymous function
                                        • args – additional optional arguments

                                        Output

                                        A map that best matches the given expression.

                                        Examples

                                        Let us first create a linear map using this macro:

                                        julia> @map x -> [1 0; 0 0]*x
                                        +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                                        We can create an affine system as well:

                                        julia> @map x -> [1 0; 0 0]*x + [2, 0]
                                        +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                                        Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:

                                        julia> @map(x -> x, dim=5)
                                        +IdentityMap(5)

                                        An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                                        julia> @map x -> I(5)*x
                                        +IdentityMap(5)
                                        source

                                        Systems with output

                                        SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                                        Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                        Fields

                                        • s – system of type ST
                                        • outputmap – output map of type MT
                                        source
                                        LinearTimeInvariantSystem(A, B, C, D)

                                        A linear time-invariant system with of the form

                                        \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                                        Input

                                        • A – matrix
                                        • B – matrix
                                        • C – matrix
                                        • D – matrix

                                        Output

                                        A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                        source
                                        LinearTimeInvariantSystem(A, B, C, D, X, U)

                                        A linear time-invariant system with state and input constraints of the form

                                        \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                                        where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                        Input

                                        • A – matrix
                                        • B – matrix
                                        • C – matrix
                                        • D – matrix
                                        • X – state constraints
                                        • U – input constraints

                                        Output

                                        A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                        source
                                        LTISystem

                                        LTISystem is an alias for LinearTimeInvariantSystem.

                                        source
                                        diff --git a/v0.6.1/search/index.html b/v0.6.1/search/index.html new file mode 100644 index 00000000..9cf191e7 --- /dev/null +++ b/v0.6.1/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                        Search

                                        Search

                                        Number of results: loading...

                                          diff --git a/v0.6.1/search_index.js b/v0.6.1/search_index.js new file mode 100644 index 00000000..62ed2b0a --- /dev/null +++ b/v0.6.1/search_index.js @@ -0,0 +1,755 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "#MathematicalSystems.jl-1", + "page": "Home", + "title": "MathematicalSystems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]MathematicalSystems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types/#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types/#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in MathematicalSystems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types/#MathematicalSystems.ContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x = 0\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form:\n\n x = 0 x(t) mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x = A x\n\nFields\n\nA – square matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AffineContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AffineContinuousSystem", + "category": "type", + "text": "AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x = A x + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n x = A x x(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineContinuousSystem", + "category": "type", + "text": "ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form:\n\n x = A x + b x(t) mathcalX\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlContinuousSystem", + "category": "type", + "text": "ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form:\n\n x = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n E x = A x x(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.PolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialContinuousSystem", + "category": "type", + "text": "PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x = p(x)\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "category": "type", + "text": "ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints:\n\n x = p(x) x(t) mathcalX\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem" +}, + +{ + "location": "lib/types/#MathematicalSystems.DiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form:\n\n x_k+1 = x_k x_k mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AffineDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AffineDiscreteSystem", + "category": "type", + "text": "AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineDiscreteSystem", + "category": "type", + "text": "ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with state constraints of the form:\n\n x_k+1 = A x_k + b x_k mathcalX text for all k\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlDiscreteSystem", + "category": "type", + "text": "ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x+k + B u_k + c x_k mathcalX u_k mathcalU text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n E x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.PolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialDiscreteSystem", + "category": "type", + "text": "PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "category": "type", + "text": "ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem" +}, + +{ + "location": "lib/types/#MathematicalSystems.IdentityMultiple", + "page": "Types", + "title": "MathematicalSystems.IdentityMultiple", + "category": "type", + "text": "IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis is a wrapper type around Julia\'s lazy multiple of the identity operator, UniformScaling, such that IdentityMultiple can be used where abstract matrix is needed for dispatch. The difference between UniformScaling and a IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\njulia> import MathematicalSystems.IdentityMultiple\n\njulia> I2 = IdentityMultiple(1.0*I, 2)\nScalar multiple of the identity matrix of order 2:\n UniformScaling{Float64}\n1.0*I\n\njulia> I2 + I2\nScalar multiple of the identity matrix of order 2:\n UniformScaling{Float64}\n2.0*I\n\njulia> 10.0 * I2\nScalar multiple of the identity matrix of order 2:\n UniformScaling{Float64}\n10.0*I\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Identity-operator-1", + "page": "Types", + "title": "Identity operator", + "category": "section", + "text": "IdentityMultiple" +}, + +{ + "location": "lib/types/#MathematicalSystems.InitialValueProblem", + "page": "Types", + "title": "MathematicalSystems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.IVP", + "page": "Types", + "title": "MathematicalSystems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractInput", + "page": "Types", + "title": "MathematicalSystems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstantInput", + "page": "Types", + "title": "MathematicalSystems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.VaryingInput", + "page": "Types", + "title": "MathematicalSystems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractMap", + "page": "Types", + "title": "MathematicalSystems.AbstractMap", + "category": "type", + "text": "AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.IdentityMap", + "page": "Types", + "title": "MathematicalSystems.IdentityMap", + "category": "type", + "text": "IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedIdentityMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedIdentityMap", + "category": "type", + "text": "ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearMap", + "page": "Types", + "title": "MathematicalSystems.LinearMap", + "category": "type", + "text": "LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearMap", + "category": "type", + "text": "ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AffineMap", + "page": "Types", + "title": "MathematicalSystems.AffineMap", + "category": "type", + "text": "AffineMap\n\nAn affine map,\n\n x Ax + b\n\nFields\n\nA – matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineMap", + "category": "type", + "text": "ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + b x(t) mathcalX\n\nFields\n\nA – matrix\nb – vector\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearControlMap", + "page": "Types", + "title": "MathematicalSystems.LinearControlMap", + "category": "type", + "text": "LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearControlMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlMap", + "category": "type", + "text": "ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AffineControlMap", + "page": "Types", + "title": "MathematicalSystems.AffineControlMap", + "category": "type", + "text": "AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineControlMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlMap", + "category": "type", + "text": "ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ResetMap", + "page": "Types", + "title": "MathematicalSystems.ResetMap", + "category": "type", + "text": "ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedResetMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedResetMap", + "category": "type", + "text": "ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Maps-1", + "page": "Types", + "title": "Maps", + "category": "section", + "text": "AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap" +}, + +{ + "location": "lib/types/#MathematicalSystems.@map", + "page": "Types", + "title": "MathematicalSystems.@map", + "category": "macro", + "text": "map(ex, args)\n\nReturns an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Macros-1", + "page": "Types", + "title": "Macros", + "category": "section", + "text": "@map" +}, + +{ + "location": "lib/types/#MathematicalSystems.SystemWithOutput", + "page": "Types", + "title": "MathematicalSystems.SystemWithOutput", + "category": "type", + "text": "SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system\'s type (ST) and in the map\'s type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearTimeInvariantSystem", + "page": "Types", + "title": "MathematicalSystems.LinearTimeInvariantSystem", + "category": "function", + "text": "LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LTISystem", + "page": "Types", + "title": "MathematicalSystems.LTISystem", + "category": "function", + "text": "LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Systems-with-output-1", + "page": "Types", + "title": "Systems with output", + "category": "section", + "text": "SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem" +}, + +{ + "location": "lib/methods/#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods/#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in MathematicalSystems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/methods/#MathematicalSystems.statedim", + "page": "Methods", + "title": "MathematicalSystems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.stateset", + "page": "Methods", + "title": "MathematicalSystems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods/#MathematicalSystems.inputdim", + "page": "Methods", + "title": "MathematicalSystems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.inputset", + "page": "Methods", + "title": "MathematicalSystems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.nextinput", + "page": "Methods", + "title": "MathematicalSystems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "lib/methods/#MathematicalSystems.outputdim", + "page": "Methods", + "title": "MathematicalSystems.outputdim", + "category": "function", + "text": "outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.outputmap", + "page": "Methods", + "title": "MathematicalSystems.outputmap", + "category": "function", + "text": "outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#Output-1", + "page": "Methods", + "title": "Output", + "category": "section", + "text": "outputdim\noutputmap" +}, + +{ + "location": "lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}", + "page": "Methods", + "title": "MathematicalSystems.islinear", + "category": "method", + "text": "islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}", + "page": "Methods", + "title": "MathematicalSystems.islinear", + "category": "method", + "text": "islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}", + "page": "Methods", + "title": "MathematicalSystems.isaffine", + "category": "method", + "text": "isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}", + "page": "Methods", + "title": "MathematicalSystems.isaffine", + "category": "method", + "text": "isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#Traits-1", + "page": "Methods", + "title": "Traits", + "category": "section", + "text": "islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nisaffine(::AbstractMap)" +}, + +{ + "location": "lib/methods/#MathematicalSystems.apply", + "page": "Methods", + "title": "MathematicalSystems.apply", + "category": "function", + "text": "apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#Maps-1", + "page": "Methods", + "title": "Maps", + "category": "section", + "text": "apply" +}, + +{ + "location": "about/#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about/#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about/#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about/#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about/#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"MathematicalSystems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about/#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about/#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about/#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to MathematicalSystems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/v0.6.1/siteinfo.js b/v0.6.1/siteinfo.js new file mode 100644 index 00000000..2f412376 --- /dev/null +++ b/v0.6.1/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.6.1"; diff --git a/v0.6.4/about/index.html b/v0.6.4/about/index.html new file mode 100644 index 00000000..f7e18c8d --- /dev/null +++ b/v0.6.4/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                          About

                                          About

                                          This page contains some general information about this project, and recommendations about contributing.

                                          Contributing

                                          If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                          Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                          Branches and pull requests (PR)

                                          We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                          Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                          Unit testing and continuous integration (CI)

                                          This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                          When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                          $ julia --color=yes test/runtests.jl

                                          Alternatively, you can achieve the same from inside the REPL using the following command:

                                          julia> Pkg.test("MathematicalSystems")

                                          We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                          Contributing to the documentation

                                          New functions and types should be documented according to our guidelines directly in the source code.

                                          You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                          julia> ?LinearContinuousSystem

                                          This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                          To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                          $ julia --color=yes docs/make.jl

                                          Note that this also runs all doctests which will take some time.

                                          Related projects

                                          This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                          Below we list more related projects.

                                          Package nameDescription
                                          HybridSystems.jlHybrid Systems definitions in Julia.
                                          LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                          ControlToolbox.jlAnalysis and design tools for control systems.
                                          ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                          DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                          ControlSystems.jlA Control Systems Toolbox for Julia
                                          ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                          Credits

                                          These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                          diff --git a/v0.6.4/assets/arrow.svg b/v0.6.4/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.6.4/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.6.4/assets/documenter.css b/v0.6.4/assets/documenter.css new file mode 100644 index 00000000..7cd26628 --- /dev/null +++ b/v0.6.4/assets/documenter.css @@ -0,0 +1,601 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                          the is very first thing on the page (i.e. the second element + * in the
                                          , * after the
                                          , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                           surrounding the , while
                                          + * highlight.js applies the .hljs style directly to the  tag.
                                          + */
                                          +.hljs {
                                          +    background-color: transparent;
                                          +    padding: 0;
                                          +}
                                          +
                                          +@media only screen and (max-width: 768px) {
                                          +    nav.toc {
                                          +        position: fixed;
                                          +        width: 16em;
                                          +        left: -16em;
                                          +        -webkit-overflow-scrolling: touch;
                                          +        -webkit-transition-property: left; /* Safari */
                                          +        -webkit-transition-duration: 0.3s; /* Safari */
                                          +        transition-property: left;
                                          +        transition-duration: 0.3s;
                                          +        -webkit-transition-timing-function: ease-out; /* Safari */
                                          +        transition-timing-function: ease-out;
                                          +        z-index: 2;
                                          +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                                          +    }
                                          +
                                          +    nav.toc.show {
                                          +        left: 0;
                                          +    }
                                          +
                                          +    article {
                                          +        margin-left: 0;
                                          +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                          +        overflow-wrap: break-word;
                                          +    }
                                          +
                                          +    article > header {
                                          +        position: fixed;
                                          +        left: 0;
                                          +        z-index: 1;
                                          +    }
                                          +
                                          +    article > header nav, hr {
                                          +        display: none;
                                          +    }
                                          +
                                          +    article > header div#topbar {
                                          +        display: block; /* is mobile */
                                          +        position: fixed;
                                          +        width: 100%;
                                          +        height: 1.5em;
                                          +        padding-top: 1em;
                                          +        padding-bottom: 1em;
                                          +        background-color: #fcfcfc;
                                          +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                          +        top: 0;
                                          +        -webkit-transition-property: top; /* Safari */
                                          +        -webkit-transition-duration: 0.3s; /* Safari */
                                          +        transition-property: top;
                                          +        transition-duration: 0.3s;
                                          +    }
                                          +
                                          +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                          +        top: -4em;
                                          +        -webkit-transition-property: top; /* Safari */
                                          +        -webkit-transition-duration: 0.7s; /* Safari */
                                          +        transition-property: top;
                                          +        transition-duration: 0.7s;
                                          +    }
                                          +
                                          +    article > header div#topbar span {
                                          +        width: 80%;
                                          +        height: 1.5em;
                                          +        margin-top: -0.1em;
                                          +        margin-left: 0.9em;
                                          +        font-size: 1.2em;
                                          +        overflow: hidden;
                                          +    }
                                          +
                                          +    article > header div#topbar a.fa-bars {
                                          +        float: right;
                                          +        padding: 0.6em;
                                          +        margin-top: -0.6em;
                                          +        margin-right: 0.3em;
                                          +        font-size: 1.5em;
                                          +    }
                                          +
                                          +    article > header div#topbar a.fa-bars:visited {
                                          +        color: #3091d1;
                                          +    }
                                          +
                                          +    article table {
                                          +        overflow-x: auto;
                                          +        display: block;
                                          +    }
                                          +
                                          +    article div.MathJax_Display {
                                          +        overflow: scroll;
                                          +    }
                                          +
                                          +    article span.MathJax {
                                          +        overflow: hidden;
                                          +    }
                                          +}
                                          +
                                          +@media only screen and (max-width: 320px) {
                                          +    body {
                                          +        font-size: 15px;
                                          +    }
                                          +}
                                          diff --git a/v0.6.4/assets/documenter.js b/v0.6.4/assets/documenter.js
                                          new file mode 100644
                                          index 00000000..761ae294
                                          --- /dev/null
                                          +++ b/v0.6.4/assets/documenter.js
                                          @@ -0,0 +1,132 @@
                                          +/*
                                          + * Part of Documenter.jl
                                          + *     https://github.com/JuliaDocs/Documenter.jl
                                          + *
                                          + * License: MIT
                                          + */
                                          +
                                          +requirejs.config({
                                          +    paths: {
                                          +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                          +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                          +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                          +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                          +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                          +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                          +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                          +    },
                                          +    shim: {
                                          +        'mathjax' : {
                                          +            exports: "MathJax"
                                          +        },
                                          +        'highlight-julia': ['highlight'],
                                          +        'highlight-julia-repl': ['highlight'],
                                          +    }
                                          +});
                                          +
                                          +// Load MathJax
                                          +require(['mathjax'], function(MathJax) {
                                          +    MathJax.Hub.Config({
                                          +      "tex2jax": {
                                          +        inlineMath: [['$','$'], ['\\(','\\)']],
                                          +        processEscapes: true
                                          +      }
                                          +    });
                                          +    MathJax.Hub.Config({
                                          +      config: ["MMLorHTML.js"],
                                          +      jax: [
                                          +        "input/TeX",
                                          +        "output/HTML-CSS",
                                          +        "output/NativeMML"
                                          +      ],
                                          +      extensions: [
                                          +        "MathMenu.js",
                                          +        "MathZoom.js",
                                          +        "TeX/AMSmath.js",
                                          +        "TeX/AMSsymbols.js",
                                          +        "TeX/autobold.js",
                                          +        "TeX/autoload-all.js"
                                          +      ]
                                          +    });
                                          +    MathJax.Hub.Config({
                                          +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                          +    });
                                          +})
                                          +
                                          +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                          +    $(document).ready(function() {
                                          +        hljs.initHighlighting();
                                          +    })
                                          +
                                          +})
                                          +
                                          +// update the version selector with info from the siteinfo.js and ../versions.js files
                                          +require(['jquery'], function($) {
                                          +    $(document).ready(function() {
                                          +        var version_selector = $("#version-selector");
                                          +
                                          +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                          +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                          +            var option = $("");
                                          +            version_selector.append(option);
                                          +        }
                                          +
                                          +        if (typeof DOC_VERSIONS !== 'undefined') {
                                          +            var existing_versions = $('#version-selector > option');
                                          +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                          +            DOC_VERSIONS.forEach(function(each) {
                                          +                var version_url = documenterBaseURL + "/../" + each;
                                          +                var existing_id = $.inArray(each, existing_versions_texts);
                                          +                // if not already in the version selector, add it as a new option,
                                          +                // otherwise update the old option with the URL and enable it
                                          +                if (existing_id == -1) {
                                          +                    var option = $("");
                                          +                    version_selector.append(option);
                                          +                } else {
                                          +                    var option = existing_versions[existing_id];
                                          +                    option.value = version_url;
                                          +                    option.disabled = false;
                                          +                }
                                          +            });
                                          +        }
                                          +
                                          +        // only show the version selector if the selector has been populated
                                          +        if ($('#version-selector > option').length > 0) {
                                          +            version_selector.css("visibility", "visible");
                                          +        }
                                          +
                                          +        // Scroll the navigation bar to the currently selected menu item
                                          +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                                          +    })
                                          +
                                          +})
                                          +
                                          +// mobile
                                          +require(['jquery', 'headroom'], function($, Headroom) {
                                          +    $(document).ready(function() {
                                          +        var navtoc = $("nav.toc");
                                          +        $("nav.toc li.current a.toctext").click(function() {
                                          +            navtoc.toggleClass('show');
                                          +        });
                                          +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                          +            ev.preventDefault();
                                          +            navtoc.toggleClass('show');
                                          +            if (navtoc.hasClass('show')) {
                                          +                var title = $("article > header div#topbar span").text();
                                          +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                          +            }
                                          +        });
                                          +        $("article#docs").bind('click', function(ev) {
                                          +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                          +                return;
                                          +            }
                                          +            if (navtoc.hasClass('show')) {
                                          +                navtoc.removeClass('show');
                                          +            }
                                          +        });
                                          +        if ($("article > header div#topbar").css('display') == 'block') {
                                          +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                          +            headroom.init();
                                          +        }
                                          +    })
                                          +})
                                          diff --git a/v0.6.4/assets/juliareach.css b/v0.6.4/assets/juliareach.css
                                          new file mode 100644
                                          index 00000000..64b0d92d
                                          --- /dev/null
                                          +++ b/v0.6.4/assets/juliareach.css
                                          @@ -0,0 +1,583 @@
                                          +/*
                                          + * The default CSS style for Documenter.jl generated sites
                                          + *
                                          + * Heavily inspired by the Julia Sphinx theme
                                          + *     https://github.com/JuliaLang/JuliaDoc
                                          + * which extends the sphinx_rtd_theme
                                          + *     https://github.com/snide/sphinx_rtd_theme
                                          + *
                                          + * Part of Documenter.jl
                                          + *     https://github.com/JuliaDocs/Documenter.jl
                                          + *
                                          + * License: MIT
                                          + */
                                          +
                                          +/* The original CSS is modified such that it right-justifies the text. */
                                          +
                                          +/* fonts */
                                          +body, input {
                                          +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                          +  font-size: 16px;
                                          +  color: #222;
                                          +  text-rendering: optimizeLegibility;
                                          +}
                                          +
                                          +pre, code, kbd {
                                          +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                          +  font-size: 0.90em;
                                          +}
                                          +
                                          +pre code {
                                          +  font-size: 1em;
                                          +}
                                          +
                                          +a {
                                          +    color: #2980b9;
                                          +    text-decoration: none;
                                          +}
                                          +
                                          +a:hover {
                                          +    color: #3091d1;
                                          +}
                                          +
                                          +a:visited {
                                          +    color: #9b59b6;
                                          +}
                                          +
                                          +body {
                                          +    line-height: 1.5;
                                          +}
                                          +
                                          +h1 {
                                          +    font-size: 1.75em;
                                          +}
                                          +
                                          +/* Unless the 

                                          the is very first thing on the page (i.e. the second element + * in the
                                          , * after the
                                          , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                           surrounding the , while
                                          + * highlight.js applies the .hljs style directly to the  tag.
                                          + */
                                          +.hljs {
                                          +    background-color: transparent;
                                          +    padding: 0;
                                          +}
                                          +
                                          +@media only screen and (max-width: 768px) {
                                          +    nav.toc {
                                          +        position: fixed;
                                          +        overflow-y: scroll;
                                          +        width: 16em;
                                          +        left: -16em;
                                          +        -webkit-overflow-scrolling: touch;
                                          +        -webkit-transition-property: left; /* Safari */
                                          +        -webkit-transition-duration: 0.3s; /* Safari */
                                          +        transition-property: left;
                                          +        transition-duration: 0.3s;
                                          +        -webkit-transition-timing-function: ease-out; /* Safari */
                                          +        transition-timing-function: ease-out;
                                          +        z-index: 2;
                                          +    }
                                          +
                                          +    nav.toc.show {
                                          +        left: 0;
                                          +    }
                                          +
                                          +    article {
                                          +        margin-left: 0;
                                          +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                          +        overflow-wrap: break-word;
                                          +    }
                                          +
                                          +    article > header {
                                          +        position: fixed;
                                          +        left: 0;
                                          +        z-index: 1;
                                          +    }
                                          +
                                          +    article > header nav, hr {
                                          +        display: none;
                                          +    }
                                          +
                                          +    article > header div#topbar {
                                          +        display: block; /* is mobile */
                                          +        position: fixed;
                                          +        width: 100%;
                                          +        height: 1.5em;
                                          +        padding-top: 1em;
                                          +        padding-bottom: 1em;
                                          +        background-color: #fcfcfc;
                                          +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                          +        top: 0;
                                          +        -webkit-transition-property: top; /* Safari */
                                          +        -webkit-transition-duration: 0.3s; /* Safari */
                                          +        transition-property: top;
                                          +        transition-duration: 0.3s;
                                          +    }
                                          +
                                          +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                          +        top: -4em;
                                          +        -webkit-transition-property: top; /* Safari */
                                          +        -webkit-transition-duration: 0.7s; /* Safari */
                                          +        transition-property: top;
                                          +        transition-duration: 0.7s;
                                          +    }
                                          +
                                          +    article > header div#topbar span {
                                          +        position: fixed;
                                          +        width: 80%;
                                          +        height: 1.5em;
                                          +        margin-top: -0.1em;
                                          +        margin-left: 0.9em;
                                          +        font-size: 1.2em;
                                          +        overflow: hidden;
                                          +    }
                                          +
                                          +    article > header div#topbar a.fa-bars {
                                          +        float: right;
                                          +        padding: 0.6em;
                                          +        margin-top: -0.6em;
                                          +        margin-right: 0.3em;
                                          +        font-size: 1.5em;
                                          +    }
                                          +
                                          +    article > header div#topbar a.fa-bars:visited {
                                          +        color: #3091d1;
                                          +    }
                                          +
                                          +    article table {
                                          +        overflow-x: auto;
                                          +        display: block;
                                          +    }
                                          +
                                          +    article div.MathJax_Display {
                                          +        overflow: scroll;
                                          +    }
                                          +
                                          +    article span.MathJax {
                                          +        overflow: hidden;
                                          +    }
                                          +}
                                          +
                                          +@media only screen and (max-width: 320px) {
                                          +    body {
                                          +        font-size: 15px;
                                          +    }
                                          +}
                                          diff --git a/v0.6.4/assets/search.js b/v0.6.4/assets/search.js
                                          new file mode 100644
                                          index 00000000..5d32c3aa
                                          --- /dev/null
                                          +++ b/v0.6.4/assets/search.js
                                          @@ -0,0 +1,250 @@
                                          +/*
                                          + * Part of Documenter.jl
                                          + *     https://github.com/JuliaDocs/Documenter.jl
                                          + *
                                          + * License: MIT
                                          + */
                                          +
                                          +// parseUri 1.2.2
                                          +// (c) Steven Levithan 
                                          +// MIT License
                                          +function parseUri (str) {
                                          +	var	o   = parseUri.options,
                                          +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                          +		uri = {},
                                          +		i   = 14;
                                          +
                                          +	while (i--) uri[o.key[i]] = m[i] || "";
                                          +
                                          +	uri[o.q.name] = {};
                                          +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                          +		if ($1) uri[o.q.name][$1] = $2;
                                          +	});
                                          +
                                          +	return uri;
                                          +};
                                          +parseUri.options = {
                                          +	strictMode: false,
                                          +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                          +	q:   {
                                          +		name:   "queryKey",
                                          +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                          +	},
                                          +	parser: {
                                          +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                          +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                          +	}
                                          +};
                                          +
                                          +requirejs.config({
                                          +    paths: {
                                          +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                          +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                                          +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                                          +    }
                                          +});
                                          +
                                          +var currentScript = document.currentScript;
                                          +
                                          +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                          +    $("#search-form").submit(function(e) {
                                          +        e.preventDefault()
                                          +    })
                                          +
                                          +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                          +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                          +    // ideally we'd just filter the original list but it's not available as a variable
                                          +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                          +        'a',
                                          +        'able',
                                          +        'about',
                                          +        'across',
                                          +        'after',
                                          +        'almost',
                                          +        'also',
                                          +        'am',
                                          +        'among',
                                          +        'an',
                                          +        'and',
                                          +        'are',
                                          +        'as',
                                          +        'at',
                                          +        'be',
                                          +        'because',
                                          +        'been',
                                          +        'but',
                                          +        'by',
                                          +        'can',
                                          +        'cannot',
                                          +        'could',
                                          +        'dear',
                                          +        'did',
                                          +        'does',
                                          +        'either',
                                          +        'ever',
                                          +        'every',
                                          +        'from',
                                          +        'got',
                                          +        'had',
                                          +        'has',
                                          +        'have',
                                          +        'he',
                                          +        'her',
                                          +        'hers',
                                          +        'him',
                                          +        'his',
                                          +        'how',
                                          +        'however',
                                          +        'i',
                                          +        'if',
                                          +        'into',
                                          +        'it',
                                          +        'its',
                                          +        'just',
                                          +        'least',
                                          +        'like',
                                          +        'likely',
                                          +        'may',
                                          +        'me',
                                          +        'might',
                                          +        'most',
                                          +        'must',
                                          +        'my',
                                          +        'neither',
                                          +        'no',
                                          +        'nor',
                                          +        'not',
                                          +        'of',
                                          +        'off',
                                          +        'often',
                                          +        'on',
                                          +        'only',
                                          +        'or',
                                          +        'other',
                                          +        'our',
                                          +        'own',
                                          +        'rather',
                                          +        'said',
                                          +        'say',
                                          +        'says',
                                          +        'she',
                                          +        'should',
                                          +        'since',
                                          +        'so',
                                          +        'some',
                                          +        'than',
                                          +        'that',
                                          +        'the',
                                          +        'their',
                                          +        'them',
                                          +        'then',
                                          +        'there',
                                          +        'these',
                                          +        'they',
                                          +        'this',
                                          +        'tis',
                                          +        'to',
                                          +        'too',
                                          +        'twas',
                                          +        'us',
                                          +        'wants',
                                          +        'was',
                                          +        'we',
                                          +        'were',
                                          +        'what',
                                          +        'when',
                                          +        'who',
                                          +        'whom',
                                          +        'why',
                                          +        'will',
                                          +        'would',
                                          +        'yet',
                                          +        'you',
                                          +        'your'
                                          +        ])
                                          +
                                          +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                          +    // would not find anything if searching for "add!", only for the entire qualification
                                          +    lunr.tokenizer.separator = /[\s\-\.]+/
                                          +
                                          +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                          +    lunr.trimmer = function (token) {
                                          +        return token.update(function (s) {
                                          +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                          +        })
                                          +    }
                                          +
                                          +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                          +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                          +
                                          +    var index = lunr(function () {
                                          +        this.ref('location')
                                          +        this.field('title')
                                          +        this.field('text')
                                          +        documenterSearchIndex['docs'].forEach(function(e) {
                                          +            this.add(e)
                                          +        }, this)
                                          +    })
                                          +    var store = {}
                                          +
                                          +    documenterSearchIndex['docs'].forEach(function(e) {
                                          +        store[e.location] = {title: e.title, category: e.category}
                                          +    })
                                          +
                                          +    $(function(){
                                          +        function update_search(querystring) {
                                          +            tokens = lunr.tokenizer(querystring)
                                          +            results = index.query(function (q) {
                                          +                tokens.forEach(function (t) {
                                          +                    q.term(t.toString(), {
                                          +                        fields: ["title"],
                                          +                        boost: 100,
                                          +                        usePipeline: false,
                                          +                        editDistance: 0,
                                          +                        wildcard: lunr.Query.wildcard.NONE
                                          +                    })
                                          +                    q.term(t.toString(), {
                                          +                        fields: ["title"],
                                          +                        boost: 10,
                                          +                        usePipeline: false,
                                          +                        editDistance: 2,
                                          +                        wildcard: lunr.Query.wildcard.NONE
                                          +                    })
                                          +                    q.term(t.toString(), {
                                          +                        fields: ["text"],
                                          +                        boost: 1,
                                          +                        usePipeline: true,
                                          +                        editDistance: 0,
                                          +                        wildcard: lunr.Query.wildcard.NONE
                                          +                    })
                                          +                })
                                          +            })
                                          +            $('#search-info').text("Number of results: " + results.length)
                                          +            $('#search-results').empty()
                                          +            results.forEach(function(result) {
                                          +                data = store[result.ref]
                                          +                link = $('')
                                          +                link.text(data.title)
                                          +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                          +                cat = $('('+data.category+')')
                                          +                li = $('
                                        • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.6.4/index.html b/v0.6.4/index.html new file mode 100644 index 00000000..52be2c2c --- /dev/null +++ b/v0.6.4/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                          Home

                                          MathematicalSystems.jl

                                          MathematicalSystems is a Julia package for mathematical systems interfaces.

                                          Features

                                          • Generic and flexible systems definitions, while being fast and type stable.
                                          • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                                          • Iterator interfaces to handle constant or time-varying inputs.

                                          Library Outline

                                          diff --git a/v0.6.4/lib/methods/index.html b/v0.6.4/lib/methods/index.html new file mode 100644 index 00000000..97c2d8d7 --- /dev/null +++ b/v0.6.4/lib/methods/index.html @@ -0,0 +1,2 @@ + +Methods · MathematicalSystems.jl

                                          Methods

                                          Methods

                                          This section describes systems methods implemented in MathematicalSystems.jl.

                                          States

                                          statedim(s::AbstractSystem)

                                          Returns the dimension of the state space of system s.

                                          source
                                          stateset(s::AbstractSystem)

                                          Returns the set of allowed states of system s.

                                          source

                                          Inputs

                                          inputdim(s::AbstractSystem)

                                          Returns the dimension of the input space of system s.

                                          source
                                          inputset(s::AbstractSystem)

                                          Returns the set of allowed inputs of system s.

                                          source
                                          nextinput(input::ConstantInput, n::Int=1)

                                          Returns the first n elements of this input.

                                          Input

                                          • input – a constant input
                                          • n – (optional, default: 1) the number of desired elements

                                          Output

                                          A repeated iterator that generates n equal samples of this input.

                                          source
                                          nextinput(input::VaryingInput, n::Int=1)

                                          Returns the first n elements of this input.

                                          Input

                                          • input – varying input
                                          • n – (optional, default: 1) number of desired elements

                                          Output

                                          An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                          source

                                          Output

                                          outputdim(m::AbstractMap)

                                          Returns the dimension of the output space of the map m.

                                          source
                                          outputmap(s::SystemWithOutput)

                                          Returns the output map of a system with output.

                                          source

                                          Traits

                                          islinear(s::AbstractSystem)

                                          Specifies if the dynamics of system s is specified by linear equations.

                                          Notes

                                          We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                                          This function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                                          [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                                          source
                                          islinear(m::AbstractMap)

                                          Specifies if the map m is linear or not.

                                          Notes

                                          A map is linear if it preserves the operations of scalar multiplication and vector addition.

                                          source
                                          isaffine(s::AbstractSystem)

                                          Specifies if the dynamics of system s is specified by affine equations.

                                          Notes

                                          An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                                          This function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                                          source
                                          isaffine(m::AbstractMap)

                                          Specifies if the map m is affine or not.

                                          Notes

                                          An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                                          source

                                          Maps

                                          apply(m::AbstractMap, args...)

                                          Apply the rule specified by the map to the given arguments.

                                          source
                                          diff --git a/v0.6.4/lib/types/index.html b/v0.6.4/lib/types/index.html new file mode 100644 index 00000000..22795d46 --- /dev/null +++ b/v0.6.4/lib/types/index.html @@ -0,0 +1,92 @@ + +Types · MathematicalSystems.jl

                                          Types

                                          Types

                                          This section describes systems types implemented in MathematicalSystems.jl.

                                          Abstract Systems

                                          AbstractSystem

                                          Abstract supertype for all system types.

                                          source
                                          AbstractContinuousSystem

                                          Abstract supertype for all continuous system types.

                                          source
                                          AbstractDiscreteSystem

                                          Abstract supertype for all discrete system types.

                                          source

                                          Continuous Systems

                                          ContinuousIdentitySystem <: AbstractContinuousSystem

                                          Trivial identity continuous-time system of the form:

                                          \[ x' = 0.\]

                                          Fields

                                          • statedim – number of state variables
                                          source
                                          ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                          Trivial identity continuous-time system with state constraints of the form:

                                          \[ x' = 0, x(t) ∈ \mathcal{X}.\]

                                          Fields

                                          • statedim – number of state variables
                                          • X – state constraints
                                          source
                                          LinearContinuousSystem

                                          Continuous-time linear system of the form:

                                          \[ x' = A x.\]

                                          Fields

                                          • A – square matrix
                                          source
                                          AffineContinuousSystem

                                          Continuous-time affine system of the form:

                                          \[ x' = A x + b.\]

                                          Fields

                                          • A – square matrix
                                          • b – vector
                                          source
                                          LinearControlContinuousSystem

                                          Continuous-time linear control system of the form:

                                          \[ x' = A x + B u.\]

                                          Fields

                                          • A – square matrix
                                          • B – matrix
                                          source
                                          ConstrainedLinearContinuousSystem

                                          Continuous-time linear system with state constraints of the form:

                                          \[ x' = A x, x(t) ∈ \mathcal{X}.\]

                                          Fields

                                          • A – square matrix
                                          • X – state constraints
                                          source
                                          ConstrainedAffineContinuousSystem

                                          Continuous-time affine system with state constraints of the form:

                                          \[ x' = A x + b, x(t) ∈ \mathcal{X}.\]

                                          Fields

                                          • A – square matrix
                                          • b – vector
                                          • X – state constraints
                                          source
                                          ConstrainedAffineControlContinuousSystem

                                          Continuous-time affine control system with state constraints of the form:

                                          \[ x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

                                          and $c$ a vector.

                                          Fields

                                          • A – square matrix
                                          • B – matrix
                                          • c – vector
                                          • X – state constraints
                                          • U – input constraints
                                          source
                                          ConstrainedLinearControlContinuousSystem

                                          Continuous-time linear control system with state constraints of the form:

                                          \[ x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                                          Fields

                                          • A – square matrix
                                          • B – matrix
                                          • X – state constraints
                                          • U – input constraints
                                          source
                                          LinearAlgebraicContinuousSystem

                                          Continuous-time linear algebraic system of the form:

                                          \[ E x' = A x.\]

                                          Fields

                                          • A – matrix
                                          • E – matrix, same size as A
                                          source
                                          ConstrainedLinearAlgebraicContinuousSystem

                                          Continuous-time linear system with state constraints of the form:

                                          \[ E x' = A x, x(t) ∈ \mathcal{X}.\]

                                          Fields

                                          • A – matrix
                                          • E – matrix, same size as A
                                          • X – state constraints
                                          source
                                          PolynomialContinuousSystem

                                          Continuous-time polynomial system of the form:

                                          \[ x' = p(x).\]

                                          Fields

                                          • p – polynomial vector field
                                          • statedim – number of state variables
                                          source
                                          ConstrainedPolynomialContinuousSystem

                                          Continuous-time polynomial system with state constraints:

                                          \[ x' = p(x), x(t) ∈ \mathcal{X}\]

                                          Fields

                                          • p – polynomial vector field
                                          • X – constraint set
                                          • statedim – number of state variables
                                          source
                                          BlackBoxContinuousSystem <: AbstractContinuousSystem

                                          Continuous-time system defined by a right-hand side of the form:

                                          \[ x' = f(x(t))\]

                                          Fields

                                          • f – function that holds the right-hand side
                                          • statedim – number of state variables
                                          source
                                          ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                                          Continuous-time system defined by a right-hand side with state constraints of the form:

                                          \[ x' = f(x(t)), x(t) ∈ \mathcal{X}.\]

                                          Fields

                                          • f – function that holds the right-hand side
                                          • statedim – number of state variables
                                          • X – state constraints
                                          source
                                          ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                          Continuous-time control system defined by a right-hand side with state constraints of the form:

                                          \[ x' = f(x(t), u(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}.\]

                                          Fields

                                          • f – function that holds the right-hand side
                                          • statedim – number of state variables
                                          • inputdim – number of input variables
                                          • X – state constraints
                                          • U – input constraints
                                          source

                                          Discrete Systems

                                          DiscreteIdentitySystem <: AbstractDiscreteSystem

                                          Trivial identity discrete-time system of the form:

                                          \[ x_{k+1} = x_k.\]

                                          Fields

                                          • statedim – number of state variables
                                          source
                                          ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                          Trivial identity discrete-time system with state constraints of the form:

                                          \[ x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]

                                          Fields

                                          • statedim – number of state variables
                                          • X – state constraints
                                          source
                                          LinearDiscreteSystem

                                          Discrete-time linear system of the form:

                                          \[ x_{k+1} = A x_k.\]

                                          Fields

                                          • A – square matrix
                                          source
                                          AffineDiscreteSystem

                                          Discrete-time affine system of the form:

                                          \[ x_{k+1} = A x_k + b.\]

                                          Fields

                                          • A – square matrix
                                          • b – vector
                                          source
                                          LinearControlDiscreteSystem

                                          Discrete-time linear control system of the form:

                                          \[ x_{k+1} = A x_k + B u_k.\]

                                          Fields

                                          • A – square matrix
                                          • B – matrix
                                          source
                                          ConstrainedLinearDiscreteSystem

                                          Discrete-time linear system with state constraints of the form:

                                          \[ x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                          Fields

                                          • A – square matrix
                                          • X – state constraints
                                          source
                                          ConstrainedAffineDiscreteSystem

                                          Discrete-time affine system with state constraints of the form:

                                          \[ x_{k+1} = A x_k + b, x_k ∈ \mathcal{X} \text{ for all } k.\]

                                          Fields

                                          • A – square matrix
                                          • b – vector
                                          • X – state constraints
                                          source
                                          ConstrainedLinearControlDiscreteSystem

                                          Discrete-time linear control system with state constraints of the form:

                                          \[ x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                                          Fields

                                          • A – square matrix
                                          • B – matrix
                                          • X – state constraints
                                          • U – input constraints
                                          source
                                          ConstrainedAffineControlDiscreteSystem

                                          Continuous-time affine control system with state constraints of the form:

                                          \[ x_{k+1} = A x+k + B u_k + c, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k,\]

                                          and $c$ a vector.

                                          Fields

                                          • A – square matrix
                                          • B – matrix
                                          • c – vector
                                          • X – state constraints
                                          • U – input constraints
                                          source
                                          LinearAlgebraicDiscreteSystem

                                          Discrete-time linear algebraic system of the form:

                                          \[ E x_{k+1} = A x_k.\]

                                          Fields

                                          • A – matrix
                                          • E – matrix, same size as A
                                          source
                                          ConstrainedLinearAlgebraicDiscreteSystem

                                          Discrete-time linear system with state constraints of the form:

                                          \[ E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                          Fields

                                          • A – matrix
                                          • E – matrix, same size as A
                                          • X – state constraints
                                          source
                                          PolynomialDiscreteSystem

                                          Discrete-time polynomial system of the form:

                                          \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                          Fields

                                          • p – polynomial vector field
                                          • statedim – number of state variables
                                          source
                                          ConstrainedPolynomialDiscreteSystem

                                          Discrete-time polynomial system with state constraints:

                                          \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                          Fields

                                          • p – polynomial
                                          • X – constraint set
                                          • statedim – number of state variables
                                          source
                                          BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                          Discrete-time system defined by a right-hand side of the form:

                                          \[ x_{k+1} = f(x_k)\]

                                          Fields

                                          • f – function that holds the right-hand side
                                          • statedim – number of state variables
                                          source
                                          ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                          Discrete-time system defined by a right-hand side with state constraints of the form:

                                          \[ x_{k+1} = f(x_k), x_k ∈ \mathcal{X}.\]

                                          Fields

                                          • f – function that holds the right-hand side
                                          • statedim – number of state variables
                                          • X – state constraints
                                          source
                                          ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                          Discrete-time control system defined by a right-hand side with state constraints of the form:

                                          \[ x_{k+1} = f(x_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}.\]

                                          Fields

                                          • f – function that holds the right-hand side
                                          • statedim – number of state variables
                                          • inputdim – number of input variables
                                          • X – state constraints
                                          • U – input constraints
                                          source

                                          Identity operator

                                          IdentityMultiple{T} < AbstractMatrix{T} where T

                                          A scalar multiple of the identity matrix of given order and numeric type.

                                          Fields

                                          • M – uniform scaling operator of type T
                                          • n – size of the identity matrix

                                          Notes

                                          This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                                          Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                                          The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                                          Examples

                                          The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                                          julia> using MathematicalSystems: IdentityMultiple
                                          +
                                          +julia> I2 = I(2)
                                          +IdentityMultiple{Float64} of value 1.0 and order 2
                                          +
                                          +julia> I2 + I2
                                          +IdentityMultiple{Float64} of value 2.0 and order 2
                                          +
                                          +julia> 4*I2
                                          +IdentityMultiple{Float64} of value 4.0 and order 2

                                          The numeric type (default Float64) can be passed as a second argument:

                                          julia> I2r = I(2, Rational{Int})
                                          +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                                          +
                                          +julia> I2r + I2r
                                          +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                          +
                                          +julia> 4*I2r
                                          +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                                          To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in

                                          julia> I2 = I(2.0, 2)
                                          +IdentityMultiple{Float64} of value 2.0 and order 2
                                          +
                                          +julia> I2r = I(2//1, 2)
                                          +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                                          Or use the lower level constructor passing the UniformScaling (I):

                                          julia> I2 = IdentityMultiple(2.0*I, 2)
                                          +IdentityMultiple{Float64} of value 2.0 and order 2
                                          +
                                          +julia> I2r = IdentityMultiple(2//1*I, 2)
                                          +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                          source

                                          Initial Value Problems

                                          InitialValueProblem

                                          Parametric composite type for initial value problems. It is parameterized in the system's type.

                                          Fields

                                          • s – system
                                          • x0 – initial state

                                          Examples

                                          The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

                                          julia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);
                                          +
                                          +julia> p.x0
                                          +2-element Array{Float64,1}:
                                          + -0.5
                                          +  0.5
                                          +
                                          +julia> statedim(p)
                                          +2
                                          +
                                          +julia> inputdim(p)
                                          +0
                                          source
                                          IVP

                                          IVP is an alias for InitialValueProblem.

                                          source

                                          Input Types

                                          AbstractInput

                                          Abstract supertype for all input types.

                                          Notes

                                          The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                          Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                          A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                          source
                                          ConstantInput{UT} <: AbstractInput

                                          Type representing an input that remains constant in time.

                                          Fields

                                          • U – input set

                                          Examples

                                          The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                          julia> c = ConstantInput(-1//2)
                                          +ConstantInput{Rational{Int64}}(-1//2)
                                          +
                                          +julia> iterate(c, 1)
                                          +(-1//2, nothing)
                                          +
                                          +julia> iterate(c, 2)
                                          +(-1//2, nothing)
                                          +
                                          +julia> collect(nextinput(c, 4))
                                          +4-element Array{Rational{Int64},1}:
                                          + -1//2
                                          + -1//2
                                          + -1//2
                                          + -1//2

                                          The elements of this input are rational numbers:

                                          julia> eltype(c)
                                          +Rational{Int64}

                                          To transform a constant input, you can use map as in:

                                          julia> map(x->2*x, c)
                                          +ConstantInput{Rational{Int64}}(-1//1)
                                          source
                                          VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                                          Type representing an input that may vary with time.

                                          Fields

                                          • U – vector of input sets

                                          Examples

                                          The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                          julia> v = VaryingInput([-1//2, 1//2])
                                          +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                                          +
                                          +julia> length(v)
                                          +2
                                          +
                                          +julia> eltype(v)
                                          +Rational{Int64}

                                          Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                          julia> iterate(v, 1)
                                          +(-1//2, 2)
                                          +
                                          +julia> iterate(v, 2)
                                          +(1//2, 3)

                                          The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                          julia> typeof(nextinput(v))
                                          +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                                          +
                                          +julia> collect(nextinput(v, 1))
                                          +1-element Array{Rational{Int64},1}:
                                          + -1//2
                                          +
                                          +julia> collect(nextinput(v, 2))
                                          +2-element Array{Rational{Int64},1}:
                                          + -1//2
                                          +  1//2

                                          You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                          julia> collect(v)
                                          +2-element Array{Rational{Int64},1}:
                                          + -1//2
                                          +  1//2
                                          +
                                          +julia> [2*vi for vi in v]
                                          +2-element Array{Rational{Int64},1}:
                                          + -1//1
                                          +  1//1

                                          Since this input type is finite, querying more elements than its length returns the full vector:

                                          julia> collect(nextinput(v, 4))
                                          +2-element Array{Rational{Int64},1}:
                                          + -1//2
                                          +  1//2

                                          To transform a varying input, you can use map as in:

                                          julia> map(x->2*x, v)
                                          +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                                          source

                                          Maps

                                          AbstractMap

                                          Abstract supertype for all map types.

                                          source
                                          IdentityMap

                                          An identity map,

                                          \[ x ↦ x.\]

                                          Fields

                                          • dim – dimension
                                          source
                                          ConstrainedIdentityMap

                                          An identity map with state constraints of the form:

                                          \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                                          Fields

                                          • dim – dimension
                                          • X – state constraints
                                          source
                                          LinearMap

                                          A linear map,

                                          \[ x ↦ Ax\]

                                          Fields

                                          • A – matrix
                                          source
                                          ConstrainedLinearMap

                                          A linear map with state constraints of the form:

                                          \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                                          Fields

                                          • A – matrix
                                          • X – state constraints
                                          source
                                          AffineMap

                                          An affine map,

                                          \[ x ↦ Ax + b.\]

                                          Fields

                                          • A – matrix
                                          • b – vector
                                          source
                                          ConstrainedAffineMap

                                          An affine map with state constraints of the form:

                                          \[ x ↦ Ax + b, x(t) ∈ \mathcal{X}.\]

                                          Fields

                                          • A – matrix
                                          • b – vector
                                          • X – state constraints
                                          source
                                          LinearControlMap

                                          A linear control map,

                                          \[ (x, u) ↦ Ax + Bu.\]

                                          Fields

                                          • A – matrix
                                          • B – matrix
                                          source
                                          ConstrainedLinearControlMap

                                          A linear control map with state and input constraints,

                                          \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                          Fields

                                          • A – matrix
                                          • B – matrix
                                          • X – state constraints
                                          • U – input constraints
                                          source
                                          AffineControlMap

                                          An affine control map,

                                          \[ (x, u) ↦ Ax + Bu + c.\]

                                          Fields

                                          • A – matrix
                                          • B – matrix
                                          • c – vector
                                          source
                                          ConstrainedAffineControlMap

                                          An affine control map with state and input constraints,

                                          \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                          Fields

                                          • A – matrix
                                          • B – matrix
                                          • c – vector
                                          • X – state constraints
                                          • U – input constraints
                                          source
                                          ResetMap

                                          A reset map,

                                          \[ x ↦ R(x),\]

                                          such that a subset of the variables is given a specified value, and the rest are unchanged.

                                          Fields

                                          • dim – dimension
                                          • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                          source
                                          ConstrainedResetMap

                                          A reset map with state constraints of the form:

                                          \[ x ↦ R(x), x ∈ \mathcal{X},\]

                                          such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                                          Fields

                                          • dim – dimension
                                          • X – state constraints
                                          • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                          source

                                          Macros

                                          map(ex, args)

                                          Returns an instance of the map type corresponding to the given expression.

                                          Input

                                          • ex – an expression defining the map, in the form of an anonymous function
                                          • args – additional optional arguments

                                          Output

                                          A map that best matches the given expression.

                                          Examples

                                          Let us first create a linear map using this macro:

                                          julia> @map x -> [1 0; 0 0]*x
                                          +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                                          We can create an affine system as well:

                                          julia> @map x -> [1 0; 0 0]*x + [2, 0]
                                          +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                                          Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:

                                          julia> @map(x -> x, dim=5)
                                          +IdentityMap(5)

                                          An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                                          julia> @map x -> I(5)*x
                                          +IdentityMap(5)
                                          source

                                          Systems with output

                                          SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                                          Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                          Fields

                                          • s – system of type ST
                                          • outputmap – output map of type MT
                                          source
                                          LinearTimeInvariantSystem(A, B, C, D)

                                          A linear time-invariant system with of the form

                                          \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                                          Input

                                          • A – matrix
                                          • B – matrix
                                          • C – matrix
                                          • D – matrix

                                          Output

                                          A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                          source
                                          LinearTimeInvariantSystem(A, B, C, D, X, U)

                                          A linear time-invariant system with state and input constraints of the form

                                          \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                                          where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                          Input

                                          • A – matrix
                                          • B – matrix
                                          • C – matrix
                                          • D – matrix
                                          • X – state constraints
                                          • U – input constraints

                                          Output

                                          A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                          source
                                          LTISystem

                                          LTISystem is an alias for LinearTimeInvariantSystem.

                                          source
                                          diff --git a/v0.6.4/search/index.html b/v0.6.4/search/index.html new file mode 100644 index 00000000..9cf191e7 --- /dev/null +++ b/v0.6.4/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                          Search

                                          Search

                                          Number of results: loading...

                                            diff --git a/v0.6.4/search_index.js b/v0.6.4/search_index.js new file mode 100644 index 00000000..96f9533f --- /dev/null +++ b/v0.6.4/search_index.js @@ -0,0 +1,803 @@ +var documenterSearchIndex = {"docs": [ + +{ + "location": "#", + "page": "Home", + "title": "Home", + "category": "page", + "text": "" +}, + +{ + "location": "#MathematicalSystems.jl-1", + "page": "Home", + "title": "MathematicalSystems.jl", + "category": "section", + "text": "DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]MathematicalSystems is a Julia package for mathematical systems interfaces." +}, + +{ + "location": "#Features-1", + "page": "Home", + "title": "Features", + "category": "section", + "text": "Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs." +}, + +{ + "location": "#Library-Outline-1", + "page": "Home", + "title": "Library Outline", + "category": "section", + "text": "Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2" +}, + +{ + "location": "lib/types/#", + "page": "Types", + "title": "Types", + "category": "page", + "text": "" +}, + +{ + "location": "lib/types/#Types-1", + "page": "Types", + "title": "Types", + "category": "section", + "text": "This section describes systems types implemented in MathematicalSystems.jl.Pages = [\"types.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractSystem", + "category": "type", + "text": "AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractContinuousSystem", + "category": "type", + "text": "AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AbstractDiscreteSystem", + "category": "type", + "text": "AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Abstract-Systems-1", + "page": "Types", + "title": "Abstract Systems", + "category": "section", + "text": "AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem" +}, + +{ + "location": "lib/types/#MathematicalSystems.ContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ContinuousIdentitySystem", + "category": "type", + "text": "ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x = 0\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedContinuousIdentitySystem", + "category": "type", + "text": "ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form:\n\n x = 0 x(t) mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearContinuousSystem", + "category": "type", + "text": "LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x = A x\n\nFields\n\nA – square matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AffineContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.AffineContinuousSystem", + "category": "type", + "text": "AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x = A x + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlContinuousSystem", + "category": "type", + "text": "LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearContinuousSystem", + "category": "type", + "text": "ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n x = A x x(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineContinuousSystem", + "category": "type", + "text": "ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form:\n\n x = A x + b x(t) mathcalX\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlContinuousSystem", + "category": "type", + "text": "ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlContinuousSystem", + "category": "type", + "text": "ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form:\n\n x = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicContinuousSystem", + "category": "type", + "text": "LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n E x = A x x(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.PolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialContinuousSystem", + "category": "type", + "text": "PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x = p(x)\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialContinuousSystem", + "category": "type", + "text": "ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints:\n\n x = p(x) x(t) mathcalX\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.BlackBoxContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.BlackBoxContinuousSystem", + "category": "type", + "text": "BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x = f(x(t))\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedBlackBoxContinuousSystem", + "category": "type", + "text": "ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t)) x(t) mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem", + "category": "type", + "text": "ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Continuous-Systems-1", + "page": "Types", + "title": "Continuous Systems", + "category": "section", + "text": "ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nConstrainedBlackBoxControlContinuousSystem" +}, + +{ + "location": "lib/types/#MathematicalSystems.DiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.DiscreteIdentitySystem", + "category": "type", + "text": "DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedDiscreteIdentitySystem", + "category": "type", + "text": "ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form:\n\n x_k+1 = x_k x_k mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearDiscreteSystem", + "category": "type", + "text": "LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AffineDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.AffineDiscreteSystem", + "category": "type", + "text": "AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearControlDiscreteSystem", + "category": "type", + "text": "LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineDiscreteSystem", + "category": "type", + "text": "ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with state constraints of the form:\n\n x_k+1 = A x_k + b x_k mathcalX text for all k\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlDiscreteSystem", + "category": "type", + "text": "ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x+k + B u_k + c x_k mathcalX u_k mathcalU text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.LinearAlgebraicDiscreteSystem", + "category": "type", + "text": "LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem", + "category": "type", + "text": "ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n E x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.PolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.PolynomialDiscreteSystem", + "category": "type", + "text": "PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedPolynomialDiscreteSystem", + "category": "type", + "text": "ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.BlackBoxDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.BlackBoxDiscreteSystem", + "category": "type", + "text": "BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k)\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedBlackBoxDiscreteSystem", + "category": "type", + "text": "ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem", + "page": "Types", + "title": "MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem", + "category": "type", + "text": "ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX u_k mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Discrete-Systems-1", + "page": "Types", + "title": "Discrete Systems", + "category": "section", + "text": "DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem" +}, + +{ + "location": "lib/types/#MathematicalSystems.IdentityMultiple", + "page": "Types", + "title": "MathematicalSystems.IdentityMultiple", + "category": "type", + "text": "IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia\'s lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the lower level constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Identity-operator-1", + "page": "Types", + "title": "Identity operator", + "category": "section", + "text": "IdentityMultiple" +}, + +{ + "location": "lib/types/#MathematicalSystems.InitialValueProblem", + "page": "Types", + "title": "MathematicalSystems.InitialValueProblem", + "category": "type", + "text": "InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system\'s type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.IVP", + "page": "Types", + "title": "MathematicalSystems.IVP", + "category": "type", + "text": "IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Initial-Value-Problems-1", + "page": "Types", + "title": "Initial Value Problems", + "category": "section", + "text": "InitialValueProblem\nIVP" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractInput", + "page": "Types", + "title": "MathematicalSystems.AbstractInput", + "category": "type", + "text": "AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstantInput", + "page": "Types", + "title": "MathematicalSystems.ConstantInput", + "category": "type", + "text": "ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base\'s iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.VaryingInput", + "page": "Types", + "title": "MathematicalSystems.VaryingInput", + "category": "type", + "text": "VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase\'s iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Input-Types-1", + "page": "Types", + "title": "Input Types", + "category": "section", + "text": "AbstractInput\nConstantInput\nVaryingInput" +}, + +{ + "location": "lib/types/#MathematicalSystems.AbstractMap", + "page": "Types", + "title": "MathematicalSystems.AbstractMap", + "category": "type", + "text": "AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.IdentityMap", + "page": "Types", + "title": "MathematicalSystems.IdentityMap", + "category": "type", + "text": "IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedIdentityMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedIdentityMap", + "category": "type", + "text": "ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearMap", + "page": "Types", + "title": "MathematicalSystems.LinearMap", + "category": "type", + "text": "LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearMap", + "category": "type", + "text": "ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AffineMap", + "page": "Types", + "title": "MathematicalSystems.AffineMap", + "category": "type", + "text": "AffineMap\n\nAn affine map,\n\n x Ax + b\n\nFields\n\nA – matrix\nb – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineMap", + "category": "type", + "text": "ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + b x(t) mathcalX\n\nFields\n\nA – matrix\nb – vector\nX – state constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearControlMap", + "page": "Types", + "title": "MathematicalSystems.LinearControlMap", + "category": "type", + "text": "LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedLinearControlMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedLinearControlMap", + "category": "type", + "text": "ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.AffineControlMap", + "page": "Types", + "title": "MathematicalSystems.AffineControlMap", + "category": "type", + "text": "AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedAffineControlMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedAffineControlMap", + "category": "type", + "text": "ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ResetMap", + "page": "Types", + "title": "MathematicalSystems.ResetMap", + "category": "type", + "text": "ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.ConstrainedResetMap", + "page": "Types", + "title": "MathematicalSystems.ConstrainedResetMap", + "category": "type", + "text": "ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Maps-1", + "page": "Types", + "title": "Maps", + "category": "section", + "text": "AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap" +}, + +{ + "location": "lib/types/#MathematicalSystems.@map", + "page": "Types", + "title": "MathematicalSystems.@map", + "category": "macro", + "text": "map(ex, args)\n\nReturns an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Macros-1", + "page": "Types", + "title": "Macros", + "category": "section", + "text": "@map" +}, + +{ + "location": "lib/types/#MathematicalSystems.SystemWithOutput", + "page": "Types", + "title": "MathematicalSystems.SystemWithOutput", + "category": "type", + "text": "SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system\'s type (ST) and in the map\'s type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LinearTimeInvariantSystem", + "page": "Types", + "title": "MathematicalSystems.LinearTimeInvariantSystem", + "category": "function", + "text": "LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#MathematicalSystems.LTISystem", + "page": "Types", + "title": "MathematicalSystems.LTISystem", + "category": "function", + "text": "LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n" +}, + +{ + "location": "lib/types/#Systems-with-output-1", + "page": "Types", + "title": "Systems with output", + "category": "section", + "text": "SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem" +}, + +{ + "location": "lib/methods/#", + "page": "Methods", + "title": "Methods", + "category": "page", + "text": "" +}, + +{ + "location": "lib/methods/#Methods-1", + "page": "Methods", + "title": "Methods", + "category": "section", + "text": "This section describes systems methods implemented in MathematicalSystems.jl.Pages = [\"methods.md\"]\nDepth = 3CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend" +}, + +{ + "location": "lib/methods/#MathematicalSystems.statedim", + "page": "Methods", + "title": "MathematicalSystems.statedim", + "category": "function", + "text": "statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.stateset", + "page": "Methods", + "title": "MathematicalSystems.stateset", + "category": "function", + "text": "stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#States-1", + "page": "Methods", + "title": "States", + "category": "section", + "text": "statedim\nstateset" +}, + +{ + "location": "lib/methods/#MathematicalSystems.inputdim", + "page": "Methods", + "title": "MathematicalSystems.inputdim", + "category": "function", + "text": "inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.inputset", + "page": "Methods", + "title": "MathematicalSystems.inputset", + "category": "function", + "text": "inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.nextinput", + "page": "Methods", + "title": "MathematicalSystems.nextinput", + "category": "function", + "text": "nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#Inputs-1", + "page": "Methods", + "title": "Inputs", + "category": "section", + "text": "inputdim\ninputset\nnextinput" +}, + +{ + "location": "lib/methods/#MathematicalSystems.outputdim", + "page": "Methods", + "title": "MathematicalSystems.outputdim", + "category": "function", + "text": "outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.outputmap", + "page": "Methods", + "title": "MathematicalSystems.outputmap", + "category": "function", + "text": "outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#Output-1", + "page": "Methods", + "title": "Output", + "category": "section", + "text": "outputdim\noutputmap" +}, + +{ + "location": "lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}", + "page": "Methods", + "title": "MathematicalSystems.islinear", + "category": "method", + "text": "islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}", + "page": "Methods", + "title": "MathematicalSystems.islinear", + "category": "method", + "text": "islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}", + "page": "Methods", + "title": "MathematicalSystems.isaffine", + "category": "method", + "text": "isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}", + "page": "Methods", + "title": "MathematicalSystems.isaffine", + "category": "method", + "text": "isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#Traits-1", + "page": "Methods", + "title": "Traits", + "category": "section", + "text": "islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nisaffine(::AbstractMap)" +}, + +{ + "location": "lib/methods/#MathematicalSystems.apply", + "page": "Methods", + "title": "MathematicalSystems.apply", + "category": "function", + "text": "apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n" +}, + +{ + "location": "lib/methods/#Maps-1", + "page": "Methods", + "title": "Maps", + "category": "section", + "text": "apply" +}, + +{ + "location": "about/#", + "page": "About", + "title": "About", + "category": "page", + "text": "" +}, + +{ + "location": "about/#About-1", + "page": "About", + "title": "About", + "category": "section", + "text": "This page contains some general information about this project, and recommendations about contributing.Pages = [\"about.md\"]" +}, + +{ + "location": "about/#Contributing-1", + "page": "About", + "title": "Contributing", + "category": "section", + "text": "If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki." +}, + +{ + "location": "about/#Branches-and-pull-requests-(PR)-1", + "page": "About", + "title": "Branches and pull requests (PR)", + "category": "section", + "text": "We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7." +}, + +{ + "location": "about/#Unit-testing-and-continuous-integration-(CI)-1", + "page": "About", + "title": "Unit testing and continuous integration (CI)", + "category": "section", + "text": "This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:$ julia --color=yes test/runtests.jlAlternatively, you can achieve the same from inside the REPL using the following command:julia> Pkg.test(\"MathematicalSystems\")We also advise adding new unit tests when adding new features to ensure long-term support of your contributions." +}, + +{ + "location": "about/#Contributing-to-the-documentation-1", + "page": "About", + "title": "Contributing to the documentation", + "category": "section", + "text": "New functions and types should be documented according to our guidelines directly in the source code.You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:julia> ?LinearContinuousSystemThis documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:$ julia --color=yes docs/make.jlNote that this also runs all doctests which will take some time." +}, + +{ + "location": "about/#Related-projects-1", + "page": "About", + "title": "Related projects", + "category": "section", + "text": "This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.Below we list more related projects.Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia" +}, + +{ + "location": "about/#Credits-1", + "page": "About", + "title": "Credits", + "category": "section", + "text": "These persons have contributed to MathematicalSystems.jl (in alphabetic order):Marcelo Forets\nBenoît Legat\nChristian Schilling" +}, + +]} diff --git a/v0.6.4/siteinfo.js b/v0.6.4/siteinfo.js new file mode 100644 index 00000000..22018c7d --- /dev/null +++ b/v0.6.4/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.6.4"; diff --git a/v0.7 b/v0.7 new file mode 120000 index 00000000..e7f5d1aa --- /dev/null +++ b/v0.7 @@ -0,0 +1 @@ +v0.7.0 \ No newline at end of file diff --git a/v0.7.0/about/index.html b/v0.7.0/about/index.html new file mode 100644 index 00000000..9c42e9c3 --- /dev/null +++ b/v0.7.0/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                            About

                                            About

                                            This page contains some general information about this project, and recommendations about contributing.

                                            Contributing

                                            If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                            Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                            Branches and pull requests (PR)

                                            We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                            Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                            Unit testing and continuous integration (CI)

                                            This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                            When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                            $ julia --color=yes test/runtests.jl

                                            Alternatively, you can achieve the same from inside the REPL using the following command:

                                            julia> Pkg.test("MathematicalSystems")

                                            We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                            Contributing to the documentation

                                            New functions and types should be documented according to our guidelines directly in the source code.

                                            You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                            julia> ?LinearContinuousSystem

                                            This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                            To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                            $ julia --color=yes docs/make.jl

                                            Note that this also runs all doctests which will take some time.

                                            Related projects

                                            This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                            Below we list more related projects.

                                            Package nameDescription
                                            HybridSystems.jlHybrid Systems definitions in Julia.
                                            LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                            ControlToolbox.jlAnalysis and design tools for control systems.
                                            ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                            DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                            ControlSystems.jlA Control Systems Toolbox for Julia
                                            ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                            Credits

                                            These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                            diff --git a/v0.7.0/assets/arrow.svg b/v0.7.0/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.7.0/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.7.0/assets/documenter.css b/v0.7.0/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.7.0/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                            the is very first thing on the page (i.e. the second element + * in the
                                            , * after the
                                            , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                             surrounding the , while
                                            + * highlight.js applies the .hljs style directly to the  tag.
                                            + */
                                            +.hljs {
                                            +    background-color: transparent;
                                            +    padding: 0;
                                            +}
                                            +
                                            +@media only screen and (max-width: 768px) {
                                            +    nav.toc {
                                            +        position: fixed;
                                            +        width: 16em;
                                            +        left: -16em;
                                            +        -webkit-overflow-scrolling: touch;
                                            +        -webkit-transition-property: left; /* Safari */
                                            +        -webkit-transition-duration: 0.3s; /* Safari */
                                            +        transition-property: left;
                                            +        transition-duration: 0.3s;
                                            +        -webkit-transition-timing-function: ease-out; /* Safari */
                                            +        transition-timing-function: ease-out;
                                            +        z-index: 2;
                                            +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                                            +    }
                                            +
                                            +    nav.toc.show {
                                            +        left: 0;
                                            +    }
                                            +
                                            +    article {
                                            +        margin-left: 0;
                                            +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                            +        overflow-wrap: break-word;
                                            +    }
                                            +
                                            +    article > header {
                                            +        position: fixed;
                                            +        left: 0;
                                            +        z-index: 1;
                                            +    }
                                            +
                                            +    article > header nav, hr {
                                            +        display: none;
                                            +    }
                                            +
                                            +    article > header div#topbar {
                                            +        display: block; /* is mobile */
                                            +        position: fixed;
                                            +        width: 100%;
                                            +        height: 1.5em;
                                            +        padding-top: 1em;
                                            +        padding-bottom: 1em;
                                            +        background-color: #fcfcfc;
                                            +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                            +        top: 0;
                                            +        -webkit-transition-property: top; /* Safari */
                                            +        -webkit-transition-duration: 0.3s; /* Safari */
                                            +        transition-property: top;
                                            +        transition-duration: 0.3s;
                                            +    }
                                            +
                                            +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                            +        top: -4em;
                                            +        -webkit-transition-property: top; /* Safari */
                                            +        -webkit-transition-duration: 0.7s; /* Safari */
                                            +        transition-property: top;
                                            +        transition-duration: 0.7s;
                                            +    }
                                            +
                                            +    article > header div#topbar span {
                                            +        width: 80%;
                                            +        height: 1.5em;
                                            +        margin-top: -0.1em;
                                            +        margin-left: 0.9em;
                                            +        font-size: 1.2em;
                                            +        overflow: hidden;
                                            +    }
                                            +
                                            +    article > header div#topbar a.fa-bars {
                                            +        float: right;
                                            +        padding: 0.6em;
                                            +        margin-top: -0.6em;
                                            +        margin-right: 0.3em;
                                            +        font-size: 1.5em;
                                            +    }
                                            +
                                            +    article > header div#topbar a.fa-bars:visited {
                                            +        color: #3091d1;
                                            +    }
                                            +
                                            +    article table {
                                            +        overflow-x: auto;
                                            +        display: block;
                                            +    }
                                            +
                                            +    article div.MathJax_Display {
                                            +        overflow: scroll;
                                            +    }
                                            +
                                            +    article span.MathJax {
                                            +        overflow: hidden;
                                            +    }
                                            +}
                                            +
                                            +@media only screen and (max-width: 320px) {
                                            +    body {
                                            +        font-size: 15px;
                                            +    }
                                            +}
                                            diff --git a/v0.7.0/assets/documenter.js b/v0.7.0/assets/documenter.js
                                            new file mode 100644
                                            index 00000000..761ae294
                                            --- /dev/null
                                            +++ b/v0.7.0/assets/documenter.js
                                            @@ -0,0 +1,132 @@
                                            +/*
                                            + * Part of Documenter.jl
                                            + *     https://github.com/JuliaDocs/Documenter.jl
                                            + *
                                            + * License: MIT
                                            + */
                                            +
                                            +requirejs.config({
                                            +    paths: {
                                            +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                            +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                            +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                            +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                            +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                            +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                            +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                            +    },
                                            +    shim: {
                                            +        'mathjax' : {
                                            +            exports: "MathJax"
                                            +        },
                                            +        'highlight-julia': ['highlight'],
                                            +        'highlight-julia-repl': ['highlight'],
                                            +    }
                                            +});
                                            +
                                            +// Load MathJax
                                            +require(['mathjax'], function(MathJax) {
                                            +    MathJax.Hub.Config({
                                            +      "tex2jax": {
                                            +        inlineMath: [['$','$'], ['\\(','\\)']],
                                            +        processEscapes: true
                                            +      }
                                            +    });
                                            +    MathJax.Hub.Config({
                                            +      config: ["MMLorHTML.js"],
                                            +      jax: [
                                            +        "input/TeX",
                                            +        "output/HTML-CSS",
                                            +        "output/NativeMML"
                                            +      ],
                                            +      extensions: [
                                            +        "MathMenu.js",
                                            +        "MathZoom.js",
                                            +        "TeX/AMSmath.js",
                                            +        "TeX/AMSsymbols.js",
                                            +        "TeX/autobold.js",
                                            +        "TeX/autoload-all.js"
                                            +      ]
                                            +    });
                                            +    MathJax.Hub.Config({
                                            +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                            +    });
                                            +})
                                            +
                                            +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                            +    $(document).ready(function() {
                                            +        hljs.initHighlighting();
                                            +    })
                                            +
                                            +})
                                            +
                                            +// update the version selector with info from the siteinfo.js and ../versions.js files
                                            +require(['jquery'], function($) {
                                            +    $(document).ready(function() {
                                            +        var version_selector = $("#version-selector");
                                            +
                                            +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                            +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                            +            var option = $("");
                                            +            version_selector.append(option);
                                            +        }
                                            +
                                            +        if (typeof DOC_VERSIONS !== 'undefined') {
                                            +            var existing_versions = $('#version-selector > option');
                                            +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                            +            DOC_VERSIONS.forEach(function(each) {
                                            +                var version_url = documenterBaseURL + "/../" + each;
                                            +                var existing_id = $.inArray(each, existing_versions_texts);
                                            +                // if not already in the version selector, add it as a new option,
                                            +                // otherwise update the old option with the URL and enable it
                                            +                if (existing_id == -1) {
                                            +                    var option = $("");
                                            +                    version_selector.append(option);
                                            +                } else {
                                            +                    var option = existing_versions[existing_id];
                                            +                    option.value = version_url;
                                            +                    option.disabled = false;
                                            +                }
                                            +            });
                                            +        }
                                            +
                                            +        // only show the version selector if the selector has been populated
                                            +        if ($('#version-selector > option').length > 0) {
                                            +            version_selector.css("visibility", "visible");
                                            +        }
                                            +
                                            +        // Scroll the navigation bar to the currently selected menu item
                                            +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                                            +    })
                                            +
                                            +})
                                            +
                                            +// mobile
                                            +require(['jquery', 'headroom'], function($, Headroom) {
                                            +    $(document).ready(function() {
                                            +        var navtoc = $("nav.toc");
                                            +        $("nav.toc li.current a.toctext").click(function() {
                                            +            navtoc.toggleClass('show');
                                            +        });
                                            +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                            +            ev.preventDefault();
                                            +            navtoc.toggleClass('show');
                                            +            if (navtoc.hasClass('show')) {
                                            +                var title = $("article > header div#topbar span").text();
                                            +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                            +            }
                                            +        });
                                            +        $("article#docs").bind('click', function(ev) {
                                            +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                            +                return;
                                            +            }
                                            +            if (navtoc.hasClass('show')) {
                                            +                navtoc.removeClass('show');
                                            +            }
                                            +        });
                                            +        if ($("article > header div#topbar").css('display') == 'block') {
                                            +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                            +            headroom.init();
                                            +        }
                                            +    })
                                            +})
                                            diff --git a/v0.7.0/assets/juliareach.css b/v0.7.0/assets/juliareach.css
                                            new file mode 100644
                                            index 00000000..64b0d92d
                                            --- /dev/null
                                            +++ b/v0.7.0/assets/juliareach.css
                                            @@ -0,0 +1,583 @@
                                            +/*
                                            + * The default CSS style for Documenter.jl generated sites
                                            + *
                                            + * Heavily inspired by the Julia Sphinx theme
                                            + *     https://github.com/JuliaLang/JuliaDoc
                                            + * which extends the sphinx_rtd_theme
                                            + *     https://github.com/snide/sphinx_rtd_theme
                                            + *
                                            + * Part of Documenter.jl
                                            + *     https://github.com/JuliaDocs/Documenter.jl
                                            + *
                                            + * License: MIT
                                            + */
                                            +
                                            +/* The original CSS is modified such that it right-justifies the text. */
                                            +
                                            +/* fonts */
                                            +body, input {
                                            +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                            +  font-size: 16px;
                                            +  color: #222;
                                            +  text-rendering: optimizeLegibility;
                                            +}
                                            +
                                            +pre, code, kbd {
                                            +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                            +  font-size: 0.90em;
                                            +}
                                            +
                                            +pre code {
                                            +  font-size: 1em;
                                            +}
                                            +
                                            +a {
                                            +    color: #2980b9;
                                            +    text-decoration: none;
                                            +}
                                            +
                                            +a:hover {
                                            +    color: #3091d1;
                                            +}
                                            +
                                            +a:visited {
                                            +    color: #9b59b6;
                                            +}
                                            +
                                            +body {
                                            +    line-height: 1.5;
                                            +}
                                            +
                                            +h1 {
                                            +    font-size: 1.75em;
                                            +}
                                            +
                                            +/* Unless the 

                                            the is very first thing on the page (i.e. the second element + * in the
                                            , * after the
                                            , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                             surrounding the , while
                                            + * highlight.js applies the .hljs style directly to the  tag.
                                            + */
                                            +.hljs {
                                            +    background-color: transparent;
                                            +    padding: 0;
                                            +}
                                            +
                                            +@media only screen and (max-width: 768px) {
                                            +    nav.toc {
                                            +        position: fixed;
                                            +        overflow-y: scroll;
                                            +        width: 16em;
                                            +        left: -16em;
                                            +        -webkit-overflow-scrolling: touch;
                                            +        -webkit-transition-property: left; /* Safari */
                                            +        -webkit-transition-duration: 0.3s; /* Safari */
                                            +        transition-property: left;
                                            +        transition-duration: 0.3s;
                                            +        -webkit-transition-timing-function: ease-out; /* Safari */
                                            +        transition-timing-function: ease-out;
                                            +        z-index: 2;
                                            +    }
                                            +
                                            +    nav.toc.show {
                                            +        left: 0;
                                            +    }
                                            +
                                            +    article {
                                            +        margin-left: 0;
                                            +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                            +        overflow-wrap: break-word;
                                            +    }
                                            +
                                            +    article > header {
                                            +        position: fixed;
                                            +        left: 0;
                                            +        z-index: 1;
                                            +    }
                                            +
                                            +    article > header nav, hr {
                                            +        display: none;
                                            +    }
                                            +
                                            +    article > header div#topbar {
                                            +        display: block; /* is mobile */
                                            +        position: fixed;
                                            +        width: 100%;
                                            +        height: 1.5em;
                                            +        padding-top: 1em;
                                            +        padding-bottom: 1em;
                                            +        background-color: #fcfcfc;
                                            +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                            +        top: 0;
                                            +        -webkit-transition-property: top; /* Safari */
                                            +        -webkit-transition-duration: 0.3s; /* Safari */
                                            +        transition-property: top;
                                            +        transition-duration: 0.3s;
                                            +    }
                                            +
                                            +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                            +        top: -4em;
                                            +        -webkit-transition-property: top; /* Safari */
                                            +        -webkit-transition-duration: 0.7s; /* Safari */
                                            +        transition-property: top;
                                            +        transition-duration: 0.7s;
                                            +    }
                                            +
                                            +    article > header div#topbar span {
                                            +        position: fixed;
                                            +        width: 80%;
                                            +        height: 1.5em;
                                            +        margin-top: -0.1em;
                                            +        margin-left: 0.9em;
                                            +        font-size: 1.2em;
                                            +        overflow: hidden;
                                            +    }
                                            +
                                            +    article > header div#topbar a.fa-bars {
                                            +        float: right;
                                            +        padding: 0.6em;
                                            +        margin-top: -0.6em;
                                            +        margin-right: 0.3em;
                                            +        font-size: 1.5em;
                                            +    }
                                            +
                                            +    article > header div#topbar a.fa-bars:visited {
                                            +        color: #3091d1;
                                            +    }
                                            +
                                            +    article table {
                                            +        overflow-x: auto;
                                            +        display: block;
                                            +    }
                                            +
                                            +    article div.MathJax_Display {
                                            +        overflow: scroll;
                                            +    }
                                            +
                                            +    article span.MathJax {
                                            +        overflow: hidden;
                                            +    }
                                            +}
                                            +
                                            +@media only screen and (max-width: 320px) {
                                            +    body {
                                            +        font-size: 15px;
                                            +    }
                                            +}
                                            diff --git a/v0.7.0/assets/search.js b/v0.7.0/assets/search.js
                                            new file mode 100644
                                            index 00000000..5d32c3aa
                                            --- /dev/null
                                            +++ b/v0.7.0/assets/search.js
                                            @@ -0,0 +1,250 @@
                                            +/*
                                            + * Part of Documenter.jl
                                            + *     https://github.com/JuliaDocs/Documenter.jl
                                            + *
                                            + * License: MIT
                                            + */
                                            +
                                            +// parseUri 1.2.2
                                            +// (c) Steven Levithan 
                                            +// MIT License
                                            +function parseUri (str) {
                                            +	var	o   = parseUri.options,
                                            +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                            +		uri = {},
                                            +		i   = 14;
                                            +
                                            +	while (i--) uri[o.key[i]] = m[i] || "";
                                            +
                                            +	uri[o.q.name] = {};
                                            +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                            +		if ($1) uri[o.q.name][$1] = $2;
                                            +	});
                                            +
                                            +	return uri;
                                            +};
                                            +parseUri.options = {
                                            +	strictMode: false,
                                            +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                            +	q:   {
                                            +		name:   "queryKey",
                                            +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                            +	},
                                            +	parser: {
                                            +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                            +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                            +	}
                                            +};
                                            +
                                            +requirejs.config({
                                            +    paths: {
                                            +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                            +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                                            +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                                            +    }
                                            +});
                                            +
                                            +var currentScript = document.currentScript;
                                            +
                                            +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                            +    $("#search-form").submit(function(e) {
                                            +        e.preventDefault()
                                            +    })
                                            +
                                            +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                            +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                            +    // ideally we'd just filter the original list but it's not available as a variable
                                            +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                            +        'a',
                                            +        'able',
                                            +        'about',
                                            +        'across',
                                            +        'after',
                                            +        'almost',
                                            +        'also',
                                            +        'am',
                                            +        'among',
                                            +        'an',
                                            +        'and',
                                            +        'are',
                                            +        'as',
                                            +        'at',
                                            +        'be',
                                            +        'because',
                                            +        'been',
                                            +        'but',
                                            +        'by',
                                            +        'can',
                                            +        'cannot',
                                            +        'could',
                                            +        'dear',
                                            +        'did',
                                            +        'does',
                                            +        'either',
                                            +        'ever',
                                            +        'every',
                                            +        'from',
                                            +        'got',
                                            +        'had',
                                            +        'has',
                                            +        'have',
                                            +        'he',
                                            +        'her',
                                            +        'hers',
                                            +        'him',
                                            +        'his',
                                            +        'how',
                                            +        'however',
                                            +        'i',
                                            +        'if',
                                            +        'into',
                                            +        'it',
                                            +        'its',
                                            +        'just',
                                            +        'least',
                                            +        'like',
                                            +        'likely',
                                            +        'may',
                                            +        'me',
                                            +        'might',
                                            +        'most',
                                            +        'must',
                                            +        'my',
                                            +        'neither',
                                            +        'no',
                                            +        'nor',
                                            +        'not',
                                            +        'of',
                                            +        'off',
                                            +        'often',
                                            +        'on',
                                            +        'only',
                                            +        'or',
                                            +        'other',
                                            +        'our',
                                            +        'own',
                                            +        'rather',
                                            +        'said',
                                            +        'say',
                                            +        'says',
                                            +        'she',
                                            +        'should',
                                            +        'since',
                                            +        'so',
                                            +        'some',
                                            +        'than',
                                            +        'that',
                                            +        'the',
                                            +        'their',
                                            +        'them',
                                            +        'then',
                                            +        'there',
                                            +        'these',
                                            +        'they',
                                            +        'this',
                                            +        'tis',
                                            +        'to',
                                            +        'too',
                                            +        'twas',
                                            +        'us',
                                            +        'wants',
                                            +        'was',
                                            +        'we',
                                            +        'were',
                                            +        'what',
                                            +        'when',
                                            +        'who',
                                            +        'whom',
                                            +        'why',
                                            +        'will',
                                            +        'would',
                                            +        'yet',
                                            +        'you',
                                            +        'your'
                                            +        ])
                                            +
                                            +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                            +    // would not find anything if searching for "add!", only for the entire qualification
                                            +    lunr.tokenizer.separator = /[\s\-\.]+/
                                            +
                                            +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                            +    lunr.trimmer = function (token) {
                                            +        return token.update(function (s) {
                                            +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                            +        })
                                            +    }
                                            +
                                            +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                            +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                            +
                                            +    var index = lunr(function () {
                                            +        this.ref('location')
                                            +        this.field('title')
                                            +        this.field('text')
                                            +        documenterSearchIndex['docs'].forEach(function(e) {
                                            +            this.add(e)
                                            +        }, this)
                                            +    })
                                            +    var store = {}
                                            +
                                            +    documenterSearchIndex['docs'].forEach(function(e) {
                                            +        store[e.location] = {title: e.title, category: e.category}
                                            +    })
                                            +
                                            +    $(function(){
                                            +        function update_search(querystring) {
                                            +            tokens = lunr.tokenizer(querystring)
                                            +            results = index.query(function (q) {
                                            +                tokens.forEach(function (t) {
                                            +                    q.term(t.toString(), {
                                            +                        fields: ["title"],
                                            +                        boost: 100,
                                            +                        usePipeline: false,
                                            +                        editDistance: 0,
                                            +                        wildcard: lunr.Query.wildcard.NONE
                                            +                    })
                                            +                    q.term(t.toString(), {
                                            +                        fields: ["title"],
                                            +                        boost: 10,
                                            +                        usePipeline: false,
                                            +                        editDistance: 2,
                                            +                        wildcard: lunr.Query.wildcard.NONE
                                            +                    })
                                            +                    q.term(t.toString(), {
                                            +                        fields: ["text"],
                                            +                        boost: 1,
                                            +                        usePipeline: true,
                                            +                        editDistance: 0,
                                            +                        wildcard: lunr.Query.wildcard.NONE
                                            +                    })
                                            +                })
                                            +            })
                                            +            $('#search-info').text("Number of results: " + results.length)
                                            +            $('#search-results').empty()
                                            +            results.forEach(function(result) {
                                            +                data = store[result.ref]
                                            +                link = $('')
                                            +                link.text(data.title)
                                            +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                            +                cat = $('('+data.category+')')
                                            +                li = $('
                                          • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.7.0/index.html b/v0.7.0/index.html new file mode 100644 index 00000000..9fc9db7b --- /dev/null +++ b/v0.7.0/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                            Home

                                            MathematicalSystems.jl

                                            MathematicalSystems is a Julia package for mathematical systems interfaces.

                                            Features

                                            • Generic and flexible systems definitions, while being fast and type stable.
                                            • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                                            • Iterator interfaces to handle constant or time-varying inputs.

                                            Library Outline

                                            diff --git a/v0.7.0/lib/methods/index.html b/v0.7.0/lib/methods/index.html new file mode 100644 index 00000000..ea86ce33 --- /dev/null +++ b/v0.7.0/lib/methods/index.html @@ -0,0 +1,8 @@ + +Methods · MathematicalSystems.jl

                                            Methods

                                            Methods

                                            This section describes systems methods implemented in MathematicalSystems.jl.

                                            States

                                            statedim(s::AbstractSystem)

                                            Returns the dimension of the state space of system s.

                                            source
                                            stateset(s::AbstractSystem)

                                            Returns the set of allowed states of system s.

                                            source

                                            Inputs

                                            inputdim(s::AbstractSystem)

                                            Returns the dimension of the input space of system s.

                                            source
                                            inputset(s::AbstractSystem)

                                            Returns the set of allowed inputs of system s.

                                            source
                                            nextinput(input::ConstantInput, n::Int=1)

                                            Returns the first n elements of this input.

                                            Input

                                            • input – a constant input
                                            • n – (optional, default: 1) the number of desired elements

                                            Output

                                            A repeated iterator that generates n equal samples of this input.

                                            source
                                            nextinput(input::VaryingInput, n::Int=1)

                                            Returns the first n elements of this input.

                                            Input

                                            • input – varying input
                                            • n – (optional, default: 1) number of desired elements

                                            Output

                                            An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                            source

                                            Output

                                            outputdim(m::AbstractMap)

                                            Returns the dimension of the output space of the map m.

                                            source
                                            outputmap(s::SystemWithOutput)

                                            Returns the output map of a system with output.

                                            source

                                            Traits

                                            islinear(s::AbstractSystem)

                                            Specifies if the dynamics of system s is specified by linear equations.

                                            Notes

                                            We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                                            This function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                                            [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                                            source
                                            islinear(m::AbstractMap)

                                            Specifies if the map m is linear or not.

                                            Notes

                                            A map is linear if it preserves the operations of scalar multiplication and vector addition.

                                            source
                                            isaffine(s::AbstractSystem)

                                            Specifies if the dynamics of system s is specified by affine equations.

                                            Notes

                                            An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                                            This function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                                            source
                                            ispolynomial(s::AbstractSystem)

                                            Specifies if the dynamics of system s is specified by polynomial equations.

                                            The criterion refers to the type information, not the value. Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                                            source
                                            isaffine(m::AbstractMap)

                                            Specifies if the map m is affine or not.

                                            Notes

                                            An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                                            source

                                            Maps

                                            apply(m::AbstractMap, args...)

                                            Apply the rule specified by the map to the given arguments.

                                            source

                                            Successor

                                            successor(system::DiscreteIdentitySystem, x::AbstractVector)

                                            Return the successor state of a DiscreteIdentitySystem.

                                            Input

                                            • systemDiscreteIdentitySystem
                                            • x – state (it should be any vector type)

                                            Output

                                            The same state x.

                                            source
                                            successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                                            +          [check_constraints]=true)

                                            Return the successor state of a ConstrainedDiscreteIdentitySystem.

                                            Input

                                            • systemConstrainedDiscreteIdentitySystem
                                            • x – state (it should be any vector type)
                                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                                            Output

                                            The same state x.

                                            source
                                            successor(system::LinearDiscreteSystem, x::AbstractVector)

                                            Return the successor state of a LinearDiscreteSystem.

                                            Input

                                            • systemLinearDiscreteSystem
                                            • x – state (it should be any vector type)

                                            Output

                                            The result of applying the system to x.

                                            source
                                            successor(system::AffineDiscreteSystem, x::AbstractVector)

                                            Return the successor state of a AffineDiscreteSystem.

                                            Input

                                            • systemAffineDiscreteSystem
                                            • x – state (it should be any vector type)

                                            Output

                                            The result of applying the system to x.

                                            source
                                            successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                                            Return the successor state of a LinearControlDiscreteSystem.

                                            Input

                                            • systemLinearControlDiscreteSystem
                                            • x – state (it should be any vector type)
                                            • u – input (it should be any vector type)

                                            Output

                                            The result of applying the system to x, with input u.

                                            source
                                            successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                                            +          [check_constraints]=true)

                                            Return the successor state of a ConstrainedLinearDiscreteSystem.

                                            Input

                                            • systemConstrainedLinearDiscreteSystem
                                            • x – state (it should be any vector type)
                                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                                            Output

                                            The result of applying the system to x.

                                            source
                                            successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                                            +          [check_constraints])

                                            Return the successor state of a ConstrainedAffineDiscreteSystem.

                                            Input

                                            • systemConstrainedAffineDiscreteSystem
                                            • x – state (it should be any vector type)
                                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                                            Output

                                            The result of applying the system to x.

                                            source
                                            successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                                            +          u::AbstractVector; [check_constraints]=true)

                                            Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                                            Input

                                            • systemConstrainedLinearControlDiscreteSystem
                                            • x – state (it should be any vector type)
                                            • u – input (it should be any vector type)
                                            • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                            Output

                                            The result of applying the system to x, with input u.

                                            source
                                            successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                                            +          u::AbstractVector; [check_constraints]=true)

                                            Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                                            Input

                                            • systemConstrainedAffineControlDiscreteSystem
                                            • x – state (it should be any vector type)
                                            • u – input (it should be any vector type)
                                            • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                            Output

                                            The result of applying the system to x, with input u.

                                            source
                                            successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                                            Return the successor state of a BlackBoxDiscreteSystem.

                                            Input

                                            • systemBlackBoxDiscreteSystem
                                            • x – state (it should be any vector type)

                                            Output

                                            The result of applying the system to x.

                                            source
                                            successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                                            +          [check_constraints]=true)

                                            Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                                            Input

                                            • systemConstrainedBlackBoxDiscreteSystem
                                            • x – state (it should be any vector type)
                                            • check_constraints – (optional, default: true) check if the state belongs to the state set

                                            Output

                                            The result of applying the system to x.

                                            source
                                            diff --git a/v0.7.0/lib/types/index.html b/v0.7.0/lib/types/index.html new file mode 100644 index 00000000..765cdae1 --- /dev/null +++ b/v0.7.0/lib/types/index.html @@ -0,0 +1,92 @@ + +Types · MathematicalSystems.jl

                                            Types

                                            Types

                                            This section describes systems types implemented in MathematicalSystems.jl.

                                            Abstract Systems

                                            AbstractSystem

                                            Abstract supertype for all system types.

                                            source
                                            AbstractContinuousSystem

                                            Abstract supertype for all continuous system types.

                                            source
                                            AbstractDiscreteSystem

                                            Abstract supertype for all discrete system types.

                                            source

                                            Continuous Systems

                                            ContinuousIdentitySystem <: AbstractContinuousSystem

                                            Trivial identity continuous-time system of the form:

                                            \[ x' = 0.\]

                                            Fields

                                            • statedim – number of state variables
                                            source
                                            ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                            Trivial identity continuous-time system with state constraints of the form:

                                            \[ x' = 0, x(t) ∈ \mathcal{X}.\]

                                            Fields

                                            • statedim – number of state variables
                                            • X – state constraints
                                            source
                                            LinearContinuousSystem

                                            Continuous-time linear system of the form:

                                            \[ x' = A x.\]

                                            Fields

                                            • A – square matrix
                                            source
                                            AffineContinuousSystem

                                            Continuous-time affine system of the form:

                                            \[ x' = A x + b.\]

                                            Fields

                                            • A – square matrix
                                            • b – vector
                                            source
                                            LinearControlContinuousSystem

                                            Continuous-time linear control system of the form:

                                            \[ x' = A x + B u.\]

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            source
                                            ConstrainedLinearContinuousSystem

                                            Continuous-time linear system with state constraints of the form:

                                            \[ x' = A x, x(t) ∈ \mathcal{X}.\]

                                            Fields

                                            • A – square matrix
                                            • X – state constraints
                                            source
                                            ConstrainedAffineContinuousSystem

                                            Continuous-time affine system with state constraints of the form:

                                            \[ x' = A x + b, x(t) ∈ \mathcal{X}.\]

                                            Fields

                                            • A – square matrix
                                            • b – vector
                                            • X – state constraints
                                            source
                                            ConstrainedAffineControlContinuousSystem

                                            Continuous-time affine control system with state constraints of the form:

                                            \[ x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

                                            and $c$ a vector.

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            • c – vector
                                            • X – state constraints
                                            • U – input constraints
                                            source
                                            ConstrainedLinearControlContinuousSystem

                                            Continuous-time linear control system with state constraints of the form:

                                            \[ x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            • X – state constraints
                                            • U – input constraints
                                            source
                                            LinearAlgebraicContinuousSystem

                                            Continuous-time linear algebraic system of the form:

                                            \[ E x' = A x.\]

                                            Fields

                                            • A – matrix
                                            • E – matrix, same size as A
                                            source
                                            ConstrainedLinearAlgebraicContinuousSystem

                                            Continuous-time linear system with state constraints of the form:

                                            \[ E x' = A x, x(t) ∈ \mathcal{X}.\]

                                            Fields

                                            • A – matrix
                                            • E – matrix, same size as A
                                            • X – state constraints
                                            source
                                            PolynomialContinuousSystem

                                            Continuous-time polynomial system of the form:

                                            \[ x' = p(x).\]

                                            Fields

                                            • p – polynomial vector field
                                            • statedim – number of state variables
                                            source
                                            ConstrainedPolynomialContinuousSystem

                                            Continuous-time polynomial system with state constraints:

                                            \[ x' = p(x), x(t) ∈ \mathcal{X}\]

                                            Fields

                                            • p – polynomial vector field
                                            • X – constraint set
                                            • statedim – number of state variables
                                            source
                                            BlackBoxContinuousSystem <: AbstractContinuousSystem

                                            Continuous-time system defined by a right-hand side of the form:

                                            \[ x' = f(x(t))\]

                                            Fields

                                            • f – function that holds the right-hand side
                                            • statedim – number of state variables
                                            source
                                            ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                                            Continuous-time system defined by a right-hand side with state constraints of the form:

                                            \[ x' = f(x(t)), x(t) ∈ \mathcal{X}.\]

                                            Fields

                                            • f – function that holds the right-hand side
                                            • statedim – number of state variables
                                            • X – state constraints
                                            source
                                            ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                            Continuous-time control system defined by a right-hand side with state and input constraints of the form:

                                            \[ x' = f(x(t), u(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}.\]

                                            Fields

                                            • f – function that holds the right-hand side
                                            • statedim – number of state variables
                                            • inputdim – number of input variables
                                            • X – state constraints
                                            • U – input constraints
                                            source
                                            NoisyConstrainedLinearContinuousSystem

                                            Continuous-time linear system with additive disturbance and state constraints of the form:

                                            \[ x' = A x + D w, x(t) ∈ \mathcal{X}, w(t) ∈ \mathcal{W}.\]

                                            Fields

                                            • A – square matrix
                                            • D – matrix
                                            • X – state constraints
                                            • W – disturbance set
                                            source
                                            NoisyConstrainedLinearControlContinuousSystem

                                            Continuous-time affine control system with state constraints of the form:

                                            \[ x' = A x + B u + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                                            and $c$ a vector.

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            • D – matrix
                                            • X – state constraints
                                            • U – input constraints
                                            • W – disturbance set
                                            source
                                            NoisyConstrainedAffineControlContinuousSystem

                                            Continuous-time affine control system with state constraints of the form:

                                            \[ x' = A x + B u + c + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                                            and $c$ a vector.

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            • c – vector
                                            • D – matrix
                                            • X – state constraints
                                            • U – input constraints
                                            • W – disturbance set
                                            source
                                            NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                            Continuous-time control system defined by a right-hand side with state constraints of the form:

                                            \[ x' = f(x(t), u(t), w(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W}.\]

                                            Fields

                                            • f – function that holds the right-hand side
                                            • statedim – number of state variables
                                            • inputdim – number of input variables
                                            • X – state constraints
                                            • U – input constraints
                                            • W – disturbance set
                                            source

                                            Discrete Systems

                                            DiscreteIdentitySystem <: AbstractDiscreteSystem

                                            Trivial identity discrete-time system of the form:

                                            \[ x_{k+1} = x_k.\]

                                            Fields

                                            • statedim – number of state variables
                                            source
                                            ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                            Trivial identity discrete-time system with state constraints of the form:

                                            \[ x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]

                                            Fields

                                            • statedim – number of state variables
                                            • X – state constraints
                                            source
                                            LinearDiscreteSystem

                                            Discrete-time linear system of the form:

                                            \[ x_{k+1} = A x_k.\]

                                            Fields

                                            • A – square matrix
                                            source
                                            AffineDiscreteSystem

                                            Discrete-time affine system of the form:

                                            \[ x_{k+1} = A x_k + b.\]

                                            Fields

                                            • A – square matrix
                                            • b – vector
                                            source
                                            LinearControlDiscreteSystem

                                            Discrete-time linear control system of the form:

                                            \[ x_{k+1} = A x_k + B u_k.\]

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            source
                                            ConstrainedLinearDiscreteSystem

                                            Discrete-time linear system with state constraints of the form:

                                            \[ x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                            Fields

                                            • A – square matrix
                                            • X – state constraints
                                            source
                                            ConstrainedAffineDiscreteSystem

                                            Discrete-time affine system with state constraints of the form:

                                            \[ x_{k+1} = A x_k + b, x_k ∈ \mathcal{X} \text{ for all } k.\]

                                            Fields

                                            • A – square matrix
                                            • b – vector
                                            • X – state constraints
                                            source
                                            ConstrainedLinearControlDiscreteSystem

                                            Discrete-time linear control system with state constraints of the form:

                                            \[ x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            • X – state constraints
                                            • U – input constraints
                                            source
                                            ConstrainedAffineControlDiscreteSystem

                                            Continuous-time affine control system with state constraints of the form:

                                            \[ x_{k+1} = A x_k + B u_k + c, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k,\]

                                            and $c$ a vector.

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            • c – vector
                                            • X – state constraints
                                            • U – input constraints
                                            source
                                            LinearAlgebraicDiscreteSystem

                                            Discrete-time linear algebraic system of the form:

                                            \[ E x_{k+1} = A x_k.\]

                                            Fields

                                            • A – matrix
                                            • E – matrix, same size as A
                                            source
                                            ConstrainedLinearAlgebraicDiscreteSystem

                                            Discrete-time linear system with state constraints of the form:

                                            \[ E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                            Fields

                                            • A – matrix
                                            • E – matrix, same size as A
                                            • X – state constraints
                                            source
                                            PolynomialDiscreteSystem

                                            Discrete-time polynomial system of the form:

                                            \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                            Fields

                                            • p – polynomial vector field
                                            • statedim – number of state variables
                                            source
                                            ConstrainedPolynomialDiscreteSystem

                                            Discrete-time polynomial system with state constraints:

                                            \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                            Fields

                                            • p – polynomial
                                            • X – constraint set
                                            • statedim – number of state variables
                                            source
                                            BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                            Discrete-time system defined by a right-hand side of the form:

                                            \[ x_{k+1} = f(x_k)\]

                                            Fields

                                            • f – function that holds the right-hand side
                                            • statedim – number of state variables
                                            source
                                            ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                            Discrete-time system defined by a right-hand side with state constraints of the form:

                                            \[ x_{k+1} = f(x_k), x_k ∈ \mathcal{X}.\]

                                            Fields

                                            • f – function that holds the right-hand side
                                            • statedim – number of state variables
                                            • X – state constraints
                                            source
                                            ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                            Discrete-time control system defined by a right-hand side with state and input constraints of the form:

                                            \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}.\]

                                            Fields

                                            • f – function that holds the right-hand side
                                            • statedim – number of state variables
                                            • inputdim – number of input variables
                                            • X – state constraints
                                            • U – input constraints
                                            source
                                            NoisyConstrainedLinearDiscreteSystem

                                            Discrete-time linear system with additive disturbance and state constraints of the form:

                                            \[ x_{k+1} = A x_k + D w_k, x_k ∈ \mathcal{X}, w(t) ∈ \mathcal{W} .\]

                                            Fields

                                            • A – square matrix
                                            • D – matrix
                                            • X – state constraints
                                            • W – disturbance set
                                            source
                                            NoisyConstrainedLinearControlDiscreteSystem

                                            Continuous-time affine control system with state constraints of the form:

                                            \[ x_{k+1} = A x_k + B u_k + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                                            and $c$ a vector.

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            • D – matrix
                                            • X – state constraints
                                            • U – input constraints
                                            • W – disturbance set
                                            source
                                            NoisyConstrainedAffineControlDiscreteSystem

                                            Continuous-time affine control system with state constraints of the form:

                                            \[ x_{k+1} = A x_k + B u_k + c + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                                            and $c$ a vector.

                                            Fields

                                            • A – square matrix
                                            • B – matrix
                                            • c – vector
                                            • D – matrix
                                            • X – state constraints
                                            • U – input constraints
                                            • W – disturbance set
                                            source
                                            NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                            Discrete-time control system defined by a right-hand side with state constraints of the form:

                                            \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W}.\]

                                            Fields

                                            • f – function that holds the right-hand side
                                            • statedim – number of state variables
                                            • inputdim – number of input variables
                                            • X – state constraints
                                            • U – input constraints
                                            • W – disturbance set
                                            source

                                            Identity operator

                                            IdentityMultiple{T} < AbstractMatrix{T} where T

                                            A scalar multiple of the identity matrix of given order and numeric type.

                                            Fields

                                            • M – uniform scaling operator of type T
                                            • n – size of the identity matrix

                                            Notes

                                            This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                                            Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                                            The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                                            Examples

                                            The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                                            julia> using MathematicalSystems: IdentityMultiple
                                            +
                                            +julia> I2 = I(2)
                                            +IdentityMultiple{Float64} of value 1.0 and order 2
                                            +
                                            +julia> I2 + I2
                                            +IdentityMultiple{Float64} of value 2.0 and order 2
                                            +
                                            +julia> 4*I2
                                            +IdentityMultiple{Float64} of value 4.0 and order 2

                                            The numeric type (default Float64) can be passed as a second argument:

                                            julia> I2r = I(2, Rational{Int})
                                            +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                                            +
                                            +julia> I2r + I2r
                                            +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                            +
                                            +julia> 4*I2r
                                            +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                                            To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in

                                            julia> I2 = I(2.0, 2)
                                            +IdentityMultiple{Float64} of value 2.0 and order 2
                                            +
                                            +julia> I2r = I(2//1, 2)
                                            +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                                            Or use the lower level constructor passing the UniformScaling (I):

                                            julia> I2 = IdentityMultiple(2.0*I, 2)
                                            +IdentityMultiple{Float64} of value 2.0 and order 2
                                            +
                                            +julia> I2r = IdentityMultiple(2//1*I, 2)
                                            +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                            source

                                            Initial Value Problems

                                            InitialValueProblem

                                            Parametric composite type for initial value problems. It is parameterized in the system's type.

                                            Fields

                                            • s – system
                                            • x0 – initial state

                                            Examples

                                            The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

                                            julia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);
                                            +
                                            +julia> p.x0
                                            +2-element Array{Float64,1}:
                                            + -0.5
                                            +  0.5
                                            +
                                            +julia> statedim(p)
                                            +2
                                            +
                                            +julia> inputdim(p)
                                            +0
                                            source
                                            IVP

                                            IVP is an alias for InitialValueProblem.

                                            source

                                            Input Types

                                            AbstractInput

                                            Abstract supertype for all input types.

                                            Notes

                                            The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                            Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                            A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                            source
                                            ConstantInput{UT} <: AbstractInput

                                            Type representing an input that remains constant in time.

                                            Fields

                                            • U – input set

                                            Examples

                                            The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                            julia> c = ConstantInput(-1//2)
                                            +ConstantInput{Rational{Int64}}(-1//2)
                                            +
                                            +julia> iterate(c, 1)
                                            +(-1//2, nothing)
                                            +
                                            +julia> iterate(c, 2)
                                            +(-1//2, nothing)
                                            +
                                            +julia> collect(nextinput(c, 4))
                                            +4-element Array{Rational{Int64},1}:
                                            + -1//2
                                            + -1//2
                                            + -1//2
                                            + -1//2

                                            The elements of this input are rational numbers:

                                            julia> eltype(c)
                                            +Rational{Int64}

                                            To transform a constant input, you can use map as in:

                                            julia> map(x->2*x, c)
                                            +ConstantInput{Rational{Int64}}(-1//1)
                                            source
                                            VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                                            Type representing an input that may vary with time.

                                            Fields

                                            • U – vector of input sets

                                            Examples

                                            The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                            julia> v = VaryingInput([-1//2, 1//2])
                                            +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                                            +
                                            +julia> length(v)
                                            +2
                                            +
                                            +julia> eltype(v)
                                            +Rational{Int64}

                                            Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                            julia> iterate(v, 1)
                                            +(-1//2, 2)
                                            +
                                            +julia> iterate(v, 2)
                                            +(1//2, 3)

                                            The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                            julia> typeof(nextinput(v))
                                            +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                                            +
                                            +julia> collect(nextinput(v, 1))
                                            +1-element Array{Rational{Int64},1}:
                                            + -1//2
                                            +
                                            +julia> collect(nextinput(v, 2))
                                            +2-element Array{Rational{Int64},1}:
                                            + -1//2
                                            +  1//2

                                            You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                            julia> collect(v)
                                            +2-element Array{Rational{Int64},1}:
                                            + -1//2
                                            +  1//2
                                            +
                                            +julia> [2*vi for vi in v]
                                            +2-element Array{Rational{Int64},1}:
                                            + -1//1
                                            +  1//1

                                            Since this input type is finite, querying more elements than its length returns the full vector:

                                            julia> collect(nextinput(v, 4))
                                            +2-element Array{Rational{Int64},1}:
                                            + -1//2
                                            +  1//2

                                            To transform a varying input, you can use map as in:

                                            julia> map(x->2*x, v)
                                            +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                                            source

                                            Maps

                                            AbstractMap

                                            Abstract supertype for all map types.

                                            source
                                            IdentityMap

                                            An identity map,

                                            \[ x ↦ x.\]

                                            Fields

                                            • dim – dimension
                                            source
                                            ConstrainedIdentityMap

                                            An identity map with state constraints of the form:

                                            \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                                            Fields

                                            • dim – dimension
                                            • X – state constraints
                                            source
                                            LinearMap

                                            A linear map,

                                            \[ x ↦ Ax\]

                                            Fields

                                            • A – matrix
                                            source
                                            ConstrainedLinearMap

                                            A linear map with state constraints of the form:

                                            \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                                            Fields

                                            • A – matrix
                                            • X – state constraints
                                            source
                                            AffineMap

                                            An affine map,

                                            \[ x ↦ Ax + b.\]

                                            Fields

                                            • A – matrix
                                            • b – vector
                                            source
                                            ConstrainedAffineMap

                                            An affine map with state constraints of the form:

                                            \[ x ↦ Ax + b, x(t) ∈ \mathcal{X}.\]

                                            Fields

                                            • A – matrix
                                            • b – vector
                                            • X – state constraints
                                            source
                                            LinearControlMap

                                            A linear control map,

                                            \[ (x, u) ↦ Ax + Bu.\]

                                            Fields

                                            • A – matrix
                                            • B – matrix
                                            source
                                            ConstrainedLinearControlMap

                                            A linear control map with state and input constraints,

                                            \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                            Fields

                                            • A – matrix
                                            • B – matrix
                                            • X – state constraints
                                            • U – input constraints
                                            source
                                            AffineControlMap

                                            An affine control map,

                                            \[ (x, u) ↦ Ax + Bu + c.\]

                                            Fields

                                            • A – matrix
                                            • B – matrix
                                            • c – vector
                                            source
                                            ConstrainedAffineControlMap

                                            An affine control map with state and input constraints,

                                            \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                            Fields

                                            • A – matrix
                                            • B – matrix
                                            • c – vector
                                            • X – state constraints
                                            • U – input constraints
                                            source
                                            ResetMap

                                            A reset map,

                                            \[ x ↦ R(x),\]

                                            such that a subset of the variables is given a specified value, and the rest are unchanged.

                                            Fields

                                            • dim – dimension
                                            • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                            source
                                            ConstrainedResetMap

                                            A reset map with state constraints of the form:

                                            \[ x ↦ R(x), x ∈ \mathcal{X},\]

                                            such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                                            Fields

                                            • dim – dimension
                                            • X – state constraints
                                            • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                            source

                                            Macros

                                            map(ex, args)

                                            Returns an instance of the map type corresponding to the given expression.

                                            Input

                                            • ex – an expression defining the map, in the form of an anonymous function
                                            • args – additional optional arguments

                                            Output

                                            A map that best matches the given expression.

                                            Examples

                                            Let us first create a linear map using this macro:

                                            julia> @map x -> [1 0; 0 0]*x
                                            +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                                            We can create an affine system as well:

                                            julia> @map x -> [1 0; 0 0]*x + [2, 0]
                                            +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                                            Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:

                                            julia> @map(x -> x, dim=5)
                                            +IdentityMap(5)

                                            An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                                            julia> @map x -> I(5)*x
                                            +IdentityMap(5)
                                            source

                                            Systems with output

                                            SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                                            Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                            Fields

                                            • s – system of type ST
                                            • outputmap – output map of type MT
                                            source
                                            LinearTimeInvariantSystem(A, B, C, D)

                                            A linear time-invariant system with of the form

                                            \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                                            Input

                                            • A – matrix
                                            • B – matrix
                                            • C – matrix
                                            • D – matrix

                                            Output

                                            A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                            source
                                            LinearTimeInvariantSystem(A, B, C, D, X, U)

                                            A linear time-invariant system with state and input constraints of the form

                                            \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                                            where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                            Input

                                            • A – matrix
                                            • B – matrix
                                            • C – matrix
                                            • D – matrix
                                            • X – state constraints
                                            • U – input constraints

                                            Output

                                            A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                            source
                                            LTISystem

                                            LTISystem is an alias for LinearTimeInvariantSystem.

                                            source
                                            diff --git a/v0.7.0/search/index.html b/v0.7.0/search/index.html new file mode 100644 index 00000000..9cf191e7 --- /dev/null +++ b/v0.7.0/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                            Search

                                            Search

                                            Number of results: loading...

                                              diff --git a/v0.7.0/search_index.js b/v0.7.0/search_index.js new file mode 100644 index 00000000..c4ef5317 --- /dev/null +++ b/v0.7.0/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x = 0\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form:\n\n x = 0 x(t) mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x = A x\n\nFields\n\nA – square matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x = A x + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n x = A x x(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form:\n\n x = A x + b x(t) mathcalX\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form:\n\n x = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n E x = A x x(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x = p(x)\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints:\n\n x = p(x) x(t) mathcalX\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x = f(x(t))\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t)) x(t) mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state and input constraints of the form:\n\n x = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and state constraints of the form:\n\n x = A x + D w x(t) mathcalX w(t) mathcalW\n\nFields\n\nA – square matrix\nD – matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t) u(t) w(t)) x(t) mathcalX u(t) mathcalU w(t) mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form:\n\n x_k+1 = x_k x_k mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with state constraints of the form:\n\n x_k+1 = A x_k + b x_k mathcalX text for all k\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c x_k mathcalX u_k mathcalU text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n E x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k)\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state and input constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and state constraints of the form:\n\n x_k+1 = A x_k + D w_k x_k mathcalX w(t) mathcalW \n\nFields\n\nA – square matrix\nD – matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU w_k mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the lower level constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system's type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + b\n\nFields\n\nA – matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + b x(t) mathcalX\n\nFields\n\nA – matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturns an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe criterion refers to the type information, not the value. Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\n","category":"function"}] +} diff --git a/v0.7.0/siteinfo.js b/v0.7.0/siteinfo.js new file mode 100644 index 00000000..26dd147b --- /dev/null +++ b/v0.7.0/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.7.0"; diff --git a/v0.8 b/v0.8 new file mode 120000 index 00000000..349ca0e1 --- /dev/null +++ b/v0.8 @@ -0,0 +1 @@ +v0.8.1 \ No newline at end of file diff --git a/v0.8.0/about/index.html b/v0.8.0/about/index.html new file mode 100644 index 00000000..9c42e9c3 --- /dev/null +++ b/v0.8.0/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                              About

                                              About

                                              This page contains some general information about this project, and recommendations about contributing.

                                              Contributing

                                              If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                              Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                              Branches and pull requests (PR)

                                              We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                              Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                              Unit testing and continuous integration (CI)

                                              This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                              When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                              $ julia --color=yes test/runtests.jl

                                              Alternatively, you can achieve the same from inside the REPL using the following command:

                                              julia> Pkg.test("MathematicalSystems")

                                              We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                              Contributing to the documentation

                                              New functions and types should be documented according to our guidelines directly in the source code.

                                              You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                              julia> ?LinearContinuousSystem

                                              This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                              To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                              $ julia --color=yes docs/make.jl

                                              Note that this also runs all doctests which will take some time.

                                              Related projects

                                              This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                              Below we list more related projects.

                                              Package nameDescription
                                              HybridSystems.jlHybrid Systems definitions in Julia.
                                              LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                              ControlToolbox.jlAnalysis and design tools for control systems.
                                              ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                              DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                              ControlSystems.jlA Control Systems Toolbox for Julia
                                              ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                              Credits

                                              These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                              diff --git a/v0.8.0/assets/arrow.svg b/v0.8.0/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.8.0/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.8.0/assets/documenter.css b/v0.8.0/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.8.0/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                              the is very first thing on the page (i.e. the second element + * in the
                                              , * after the
                                              , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                               surrounding the , while
                                              + * highlight.js applies the .hljs style directly to the  tag.
                                              + */
                                              +.hljs {
                                              +    background-color: transparent;
                                              +    padding: 0;
                                              +}
                                              +
                                              +@media only screen and (max-width: 768px) {
                                              +    nav.toc {
                                              +        position: fixed;
                                              +        width: 16em;
                                              +        left: -16em;
                                              +        -webkit-overflow-scrolling: touch;
                                              +        -webkit-transition-property: left; /* Safari */
                                              +        -webkit-transition-duration: 0.3s; /* Safari */
                                              +        transition-property: left;
                                              +        transition-duration: 0.3s;
                                              +        -webkit-transition-timing-function: ease-out; /* Safari */
                                              +        transition-timing-function: ease-out;
                                              +        z-index: 2;
                                              +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                                              +    }
                                              +
                                              +    nav.toc.show {
                                              +        left: 0;
                                              +    }
                                              +
                                              +    article {
                                              +        margin-left: 0;
                                              +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                              +        overflow-wrap: break-word;
                                              +    }
                                              +
                                              +    article > header {
                                              +        position: fixed;
                                              +        left: 0;
                                              +        z-index: 1;
                                              +    }
                                              +
                                              +    article > header nav, hr {
                                              +        display: none;
                                              +    }
                                              +
                                              +    article > header div#topbar {
                                              +        display: block; /* is mobile */
                                              +        position: fixed;
                                              +        width: 100%;
                                              +        height: 1.5em;
                                              +        padding-top: 1em;
                                              +        padding-bottom: 1em;
                                              +        background-color: #fcfcfc;
                                              +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                              +        top: 0;
                                              +        -webkit-transition-property: top; /* Safari */
                                              +        -webkit-transition-duration: 0.3s; /* Safari */
                                              +        transition-property: top;
                                              +        transition-duration: 0.3s;
                                              +    }
                                              +
                                              +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                              +        top: -4em;
                                              +        -webkit-transition-property: top; /* Safari */
                                              +        -webkit-transition-duration: 0.7s; /* Safari */
                                              +        transition-property: top;
                                              +        transition-duration: 0.7s;
                                              +    }
                                              +
                                              +    article > header div#topbar span {
                                              +        width: 80%;
                                              +        height: 1.5em;
                                              +        margin-top: -0.1em;
                                              +        margin-left: 0.9em;
                                              +        font-size: 1.2em;
                                              +        overflow: hidden;
                                              +    }
                                              +
                                              +    article > header div#topbar a.fa-bars {
                                              +        float: right;
                                              +        padding: 0.6em;
                                              +        margin-top: -0.6em;
                                              +        margin-right: 0.3em;
                                              +        font-size: 1.5em;
                                              +    }
                                              +
                                              +    article > header div#topbar a.fa-bars:visited {
                                              +        color: #3091d1;
                                              +    }
                                              +
                                              +    article table {
                                              +        overflow-x: auto;
                                              +        display: block;
                                              +    }
                                              +
                                              +    article div.MathJax_Display {
                                              +        overflow: scroll;
                                              +    }
                                              +
                                              +    article span.MathJax {
                                              +        overflow: hidden;
                                              +    }
                                              +}
                                              +
                                              +@media only screen and (max-width: 320px) {
                                              +    body {
                                              +        font-size: 15px;
                                              +    }
                                              +}
                                              diff --git a/v0.8.0/assets/documenter.js b/v0.8.0/assets/documenter.js
                                              new file mode 100644
                                              index 00000000..761ae294
                                              --- /dev/null
                                              +++ b/v0.8.0/assets/documenter.js
                                              @@ -0,0 +1,132 @@
                                              +/*
                                              + * Part of Documenter.jl
                                              + *     https://github.com/JuliaDocs/Documenter.jl
                                              + *
                                              + * License: MIT
                                              + */
                                              +
                                              +requirejs.config({
                                              +    paths: {
                                              +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                              +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                              +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                              +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                              +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                              +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                              +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                              +    },
                                              +    shim: {
                                              +        'mathjax' : {
                                              +            exports: "MathJax"
                                              +        },
                                              +        'highlight-julia': ['highlight'],
                                              +        'highlight-julia-repl': ['highlight'],
                                              +    }
                                              +});
                                              +
                                              +// Load MathJax
                                              +require(['mathjax'], function(MathJax) {
                                              +    MathJax.Hub.Config({
                                              +      "tex2jax": {
                                              +        inlineMath: [['$','$'], ['\\(','\\)']],
                                              +        processEscapes: true
                                              +      }
                                              +    });
                                              +    MathJax.Hub.Config({
                                              +      config: ["MMLorHTML.js"],
                                              +      jax: [
                                              +        "input/TeX",
                                              +        "output/HTML-CSS",
                                              +        "output/NativeMML"
                                              +      ],
                                              +      extensions: [
                                              +        "MathMenu.js",
                                              +        "MathZoom.js",
                                              +        "TeX/AMSmath.js",
                                              +        "TeX/AMSsymbols.js",
                                              +        "TeX/autobold.js",
                                              +        "TeX/autoload-all.js"
                                              +      ]
                                              +    });
                                              +    MathJax.Hub.Config({
                                              +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                              +    });
                                              +})
                                              +
                                              +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                              +    $(document).ready(function() {
                                              +        hljs.initHighlighting();
                                              +    })
                                              +
                                              +})
                                              +
                                              +// update the version selector with info from the siteinfo.js and ../versions.js files
                                              +require(['jquery'], function($) {
                                              +    $(document).ready(function() {
                                              +        var version_selector = $("#version-selector");
                                              +
                                              +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                              +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                              +            var option = $("");
                                              +            version_selector.append(option);
                                              +        }
                                              +
                                              +        if (typeof DOC_VERSIONS !== 'undefined') {
                                              +            var existing_versions = $('#version-selector > option');
                                              +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                              +            DOC_VERSIONS.forEach(function(each) {
                                              +                var version_url = documenterBaseURL + "/../" + each;
                                              +                var existing_id = $.inArray(each, existing_versions_texts);
                                              +                // if not already in the version selector, add it as a new option,
                                              +                // otherwise update the old option with the URL and enable it
                                              +                if (existing_id == -1) {
                                              +                    var option = $("");
                                              +                    version_selector.append(option);
                                              +                } else {
                                              +                    var option = existing_versions[existing_id];
                                              +                    option.value = version_url;
                                              +                    option.disabled = false;
                                              +                }
                                              +            });
                                              +        }
                                              +
                                              +        // only show the version selector if the selector has been populated
                                              +        if ($('#version-selector > option').length > 0) {
                                              +            version_selector.css("visibility", "visible");
                                              +        }
                                              +
                                              +        // Scroll the navigation bar to the currently selected menu item
                                              +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                                              +    })
                                              +
                                              +})
                                              +
                                              +// mobile
                                              +require(['jquery', 'headroom'], function($, Headroom) {
                                              +    $(document).ready(function() {
                                              +        var navtoc = $("nav.toc");
                                              +        $("nav.toc li.current a.toctext").click(function() {
                                              +            navtoc.toggleClass('show');
                                              +        });
                                              +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                              +            ev.preventDefault();
                                              +            navtoc.toggleClass('show');
                                              +            if (navtoc.hasClass('show')) {
                                              +                var title = $("article > header div#topbar span").text();
                                              +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                              +            }
                                              +        });
                                              +        $("article#docs").bind('click', function(ev) {
                                              +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                              +                return;
                                              +            }
                                              +            if (navtoc.hasClass('show')) {
                                              +                navtoc.removeClass('show');
                                              +            }
                                              +        });
                                              +        if ($("article > header div#topbar").css('display') == 'block') {
                                              +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                              +            headroom.init();
                                              +        }
                                              +    })
                                              +})
                                              diff --git a/v0.8.0/assets/juliareach.css b/v0.8.0/assets/juliareach.css
                                              new file mode 100644
                                              index 00000000..64b0d92d
                                              --- /dev/null
                                              +++ b/v0.8.0/assets/juliareach.css
                                              @@ -0,0 +1,583 @@
                                              +/*
                                              + * The default CSS style for Documenter.jl generated sites
                                              + *
                                              + * Heavily inspired by the Julia Sphinx theme
                                              + *     https://github.com/JuliaLang/JuliaDoc
                                              + * which extends the sphinx_rtd_theme
                                              + *     https://github.com/snide/sphinx_rtd_theme
                                              + *
                                              + * Part of Documenter.jl
                                              + *     https://github.com/JuliaDocs/Documenter.jl
                                              + *
                                              + * License: MIT
                                              + */
                                              +
                                              +/* The original CSS is modified such that it right-justifies the text. */
                                              +
                                              +/* fonts */
                                              +body, input {
                                              +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                              +  font-size: 16px;
                                              +  color: #222;
                                              +  text-rendering: optimizeLegibility;
                                              +}
                                              +
                                              +pre, code, kbd {
                                              +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                              +  font-size: 0.90em;
                                              +}
                                              +
                                              +pre code {
                                              +  font-size: 1em;
                                              +}
                                              +
                                              +a {
                                              +    color: #2980b9;
                                              +    text-decoration: none;
                                              +}
                                              +
                                              +a:hover {
                                              +    color: #3091d1;
                                              +}
                                              +
                                              +a:visited {
                                              +    color: #9b59b6;
                                              +}
                                              +
                                              +body {
                                              +    line-height: 1.5;
                                              +}
                                              +
                                              +h1 {
                                              +    font-size: 1.75em;
                                              +}
                                              +
                                              +/* Unless the 

                                              the is very first thing on the page (i.e. the second element + * in the
                                              , * after the
                                              , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                               surrounding the , while
                                              + * highlight.js applies the .hljs style directly to the  tag.
                                              + */
                                              +.hljs {
                                              +    background-color: transparent;
                                              +    padding: 0;
                                              +}
                                              +
                                              +@media only screen and (max-width: 768px) {
                                              +    nav.toc {
                                              +        position: fixed;
                                              +        overflow-y: scroll;
                                              +        width: 16em;
                                              +        left: -16em;
                                              +        -webkit-overflow-scrolling: touch;
                                              +        -webkit-transition-property: left; /* Safari */
                                              +        -webkit-transition-duration: 0.3s; /* Safari */
                                              +        transition-property: left;
                                              +        transition-duration: 0.3s;
                                              +        -webkit-transition-timing-function: ease-out; /* Safari */
                                              +        transition-timing-function: ease-out;
                                              +        z-index: 2;
                                              +    }
                                              +
                                              +    nav.toc.show {
                                              +        left: 0;
                                              +    }
                                              +
                                              +    article {
                                              +        margin-left: 0;
                                              +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                              +        overflow-wrap: break-word;
                                              +    }
                                              +
                                              +    article > header {
                                              +        position: fixed;
                                              +        left: 0;
                                              +        z-index: 1;
                                              +    }
                                              +
                                              +    article > header nav, hr {
                                              +        display: none;
                                              +    }
                                              +
                                              +    article > header div#topbar {
                                              +        display: block; /* is mobile */
                                              +        position: fixed;
                                              +        width: 100%;
                                              +        height: 1.5em;
                                              +        padding-top: 1em;
                                              +        padding-bottom: 1em;
                                              +        background-color: #fcfcfc;
                                              +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                              +        top: 0;
                                              +        -webkit-transition-property: top; /* Safari */
                                              +        -webkit-transition-duration: 0.3s; /* Safari */
                                              +        transition-property: top;
                                              +        transition-duration: 0.3s;
                                              +    }
                                              +
                                              +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                              +        top: -4em;
                                              +        -webkit-transition-property: top; /* Safari */
                                              +        -webkit-transition-duration: 0.7s; /* Safari */
                                              +        transition-property: top;
                                              +        transition-duration: 0.7s;
                                              +    }
                                              +
                                              +    article > header div#topbar span {
                                              +        position: fixed;
                                              +        width: 80%;
                                              +        height: 1.5em;
                                              +        margin-top: -0.1em;
                                              +        margin-left: 0.9em;
                                              +        font-size: 1.2em;
                                              +        overflow: hidden;
                                              +    }
                                              +
                                              +    article > header div#topbar a.fa-bars {
                                              +        float: right;
                                              +        padding: 0.6em;
                                              +        margin-top: -0.6em;
                                              +        margin-right: 0.3em;
                                              +        font-size: 1.5em;
                                              +    }
                                              +
                                              +    article > header div#topbar a.fa-bars:visited {
                                              +        color: #3091d1;
                                              +    }
                                              +
                                              +    article table {
                                              +        overflow-x: auto;
                                              +        display: block;
                                              +    }
                                              +
                                              +    article div.MathJax_Display {
                                              +        overflow: scroll;
                                              +    }
                                              +
                                              +    article span.MathJax {
                                              +        overflow: hidden;
                                              +    }
                                              +}
                                              +
                                              +@media only screen and (max-width: 320px) {
                                              +    body {
                                              +        font-size: 15px;
                                              +    }
                                              +}
                                              diff --git a/v0.8.0/assets/search.js b/v0.8.0/assets/search.js
                                              new file mode 100644
                                              index 00000000..5d32c3aa
                                              --- /dev/null
                                              +++ b/v0.8.0/assets/search.js
                                              @@ -0,0 +1,250 @@
                                              +/*
                                              + * Part of Documenter.jl
                                              + *     https://github.com/JuliaDocs/Documenter.jl
                                              + *
                                              + * License: MIT
                                              + */
                                              +
                                              +// parseUri 1.2.2
                                              +// (c) Steven Levithan 
                                              +// MIT License
                                              +function parseUri (str) {
                                              +	var	o   = parseUri.options,
                                              +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                              +		uri = {},
                                              +		i   = 14;
                                              +
                                              +	while (i--) uri[o.key[i]] = m[i] || "";
                                              +
                                              +	uri[o.q.name] = {};
                                              +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                              +		if ($1) uri[o.q.name][$1] = $2;
                                              +	});
                                              +
                                              +	return uri;
                                              +};
                                              +parseUri.options = {
                                              +	strictMode: false,
                                              +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                              +	q:   {
                                              +		name:   "queryKey",
                                              +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                              +	},
                                              +	parser: {
                                              +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                              +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                              +	}
                                              +};
                                              +
                                              +requirejs.config({
                                              +    paths: {
                                              +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                              +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                                              +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                                              +    }
                                              +});
                                              +
                                              +var currentScript = document.currentScript;
                                              +
                                              +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                              +    $("#search-form").submit(function(e) {
                                              +        e.preventDefault()
                                              +    })
                                              +
                                              +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                              +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                              +    // ideally we'd just filter the original list but it's not available as a variable
                                              +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                              +        'a',
                                              +        'able',
                                              +        'about',
                                              +        'across',
                                              +        'after',
                                              +        'almost',
                                              +        'also',
                                              +        'am',
                                              +        'among',
                                              +        'an',
                                              +        'and',
                                              +        'are',
                                              +        'as',
                                              +        'at',
                                              +        'be',
                                              +        'because',
                                              +        'been',
                                              +        'but',
                                              +        'by',
                                              +        'can',
                                              +        'cannot',
                                              +        'could',
                                              +        'dear',
                                              +        'did',
                                              +        'does',
                                              +        'either',
                                              +        'ever',
                                              +        'every',
                                              +        'from',
                                              +        'got',
                                              +        'had',
                                              +        'has',
                                              +        'have',
                                              +        'he',
                                              +        'her',
                                              +        'hers',
                                              +        'him',
                                              +        'his',
                                              +        'how',
                                              +        'however',
                                              +        'i',
                                              +        'if',
                                              +        'into',
                                              +        'it',
                                              +        'its',
                                              +        'just',
                                              +        'least',
                                              +        'like',
                                              +        'likely',
                                              +        'may',
                                              +        'me',
                                              +        'might',
                                              +        'most',
                                              +        'must',
                                              +        'my',
                                              +        'neither',
                                              +        'no',
                                              +        'nor',
                                              +        'not',
                                              +        'of',
                                              +        'off',
                                              +        'often',
                                              +        'on',
                                              +        'only',
                                              +        'or',
                                              +        'other',
                                              +        'our',
                                              +        'own',
                                              +        'rather',
                                              +        'said',
                                              +        'say',
                                              +        'says',
                                              +        'she',
                                              +        'should',
                                              +        'since',
                                              +        'so',
                                              +        'some',
                                              +        'than',
                                              +        'that',
                                              +        'the',
                                              +        'their',
                                              +        'them',
                                              +        'then',
                                              +        'there',
                                              +        'these',
                                              +        'they',
                                              +        'this',
                                              +        'tis',
                                              +        'to',
                                              +        'too',
                                              +        'twas',
                                              +        'us',
                                              +        'wants',
                                              +        'was',
                                              +        'we',
                                              +        'were',
                                              +        'what',
                                              +        'when',
                                              +        'who',
                                              +        'whom',
                                              +        'why',
                                              +        'will',
                                              +        'would',
                                              +        'yet',
                                              +        'you',
                                              +        'your'
                                              +        ])
                                              +
                                              +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                              +    // would not find anything if searching for "add!", only for the entire qualification
                                              +    lunr.tokenizer.separator = /[\s\-\.]+/
                                              +
                                              +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                              +    lunr.trimmer = function (token) {
                                              +        return token.update(function (s) {
                                              +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                              +        })
                                              +    }
                                              +
                                              +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                              +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                              +
                                              +    var index = lunr(function () {
                                              +        this.ref('location')
                                              +        this.field('title')
                                              +        this.field('text')
                                              +        documenterSearchIndex['docs'].forEach(function(e) {
                                              +            this.add(e)
                                              +        }, this)
                                              +    })
                                              +    var store = {}
                                              +
                                              +    documenterSearchIndex['docs'].forEach(function(e) {
                                              +        store[e.location] = {title: e.title, category: e.category}
                                              +    })
                                              +
                                              +    $(function(){
                                              +        function update_search(querystring) {
                                              +            tokens = lunr.tokenizer(querystring)
                                              +            results = index.query(function (q) {
                                              +                tokens.forEach(function (t) {
                                              +                    q.term(t.toString(), {
                                              +                        fields: ["title"],
                                              +                        boost: 100,
                                              +                        usePipeline: false,
                                              +                        editDistance: 0,
                                              +                        wildcard: lunr.Query.wildcard.NONE
                                              +                    })
                                              +                    q.term(t.toString(), {
                                              +                        fields: ["title"],
                                              +                        boost: 10,
                                              +                        usePipeline: false,
                                              +                        editDistance: 2,
                                              +                        wildcard: lunr.Query.wildcard.NONE
                                              +                    })
                                              +                    q.term(t.toString(), {
                                              +                        fields: ["text"],
                                              +                        boost: 1,
                                              +                        usePipeline: true,
                                              +                        editDistance: 0,
                                              +                        wildcard: lunr.Query.wildcard.NONE
                                              +                    })
                                              +                })
                                              +            })
                                              +            $('#search-info').text("Number of results: " + results.length)
                                              +            $('#search-results').empty()
                                              +            results.forEach(function(result) {
                                              +                data = store[result.ref]
                                              +                link = $('')
                                              +                link.text(data.title)
                                              +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                              +                cat = $('('+data.category+')')
                                              +                li = $('
                                            • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.8.0/index.html b/v0.8.0/index.html new file mode 100644 index 00000000..9fc9db7b --- /dev/null +++ b/v0.8.0/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                              Home

                                              MathematicalSystems.jl

                                              MathematicalSystems is a Julia package for mathematical systems interfaces.

                                              Features

                                              • Generic and flexible systems definitions, while being fast and type stable.
                                              • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                                              • Iterator interfaces to handle constant or time-varying inputs.

                                              Library Outline

                                              diff --git a/v0.8.0/lib/methods/index.html b/v0.8.0/lib/methods/index.html new file mode 100644 index 00000000..7d957034 --- /dev/null +++ b/v0.8.0/lib/methods/index.html @@ -0,0 +1,13 @@ + +Methods · MathematicalSystems.jl

                                              Methods

                                              Methods

                                              This section describes systems methods implemented in MathematicalSystems.jl.

                                              States

                                              statedim(s::AbstractSystem)

                                              Returns the dimension of the state space of system s.

                                              source
                                              stateset(s::AbstractSystem)

                                              Returns the set of allowed states of system s.

                                              source

                                              Inputs

                                              inputdim(s::AbstractSystem)

                                              Returns the dimension of the input space of system s.

                                              source
                                              inputset(s::AbstractSystem)

                                              Returns the set of allowed inputs of system s.

                                              source
                                              nextinput(input::ConstantInput, n::Int=1)

                                              Returns the first n elements of this input.

                                              Input

                                              • input – a constant input
                                              • n – (optional, default: 1) the number of desired elements

                                              Output

                                              A repeated iterator that generates n equal samples of this input.

                                              source
                                              nextinput(input::VaryingInput, n::Int=1)

                                              Returns the first n elements of this input.

                                              Input

                                              • input – varying input
                                              • n – (optional, default: 1) number of desired elements

                                              Output

                                              An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                              source

                                              Output

                                              outputdim(m::AbstractMap)

                                              Returns the dimension of the output space of the map m.

                                              source
                                              outputmap(s::SystemWithOutput)

                                              Returns the output map of a system with output.

                                              source

                                              Traits

                                              islinear(s::AbstractSystem)

                                              Specifies if the dynamics of system s is specified by linear equations.

                                              Notes

                                              We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                                              This function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                                              [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                                              source
                                              islinear(m::AbstractMap)

                                              Specifies if the map m is linear or not.

                                              Notes

                                              A map is linear if it preserves the operations of scalar multiplication and vector addition.

                                              source
                                              isaffine(s::AbstractSystem)

                                              Specifies if the dynamics of system s is specified by affine equations.

                                              Notes

                                              An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                                              This function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                                              source
                                              ispolynomial(s::AbstractSystem)

                                              Specifies if the dynamics of system s is specified by polynomial equations.

                                              The criterion refers to the type information, not the value. Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                                              source
                                              isaffine(m::AbstractMap)

                                              Specifies if the map m is affine or not.

                                              Notes

                                              An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                                              source

                                              Maps

                                              apply(m::AbstractMap, args...)

                                              Apply the rule specified by the map to the given arguments.

                                              source

                                              Successor

                                              successor(system::DiscreteIdentitySystem, x::AbstractVector)

                                              Return the successor state of a DiscreteIdentitySystem.

                                              Input

                                              • systemDiscreteIdentitySystem
                                              • x – state (it should be any vector type)

                                              Output

                                              The same state x.

                                              source
                                              successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                                              +          [check_constraints]=true)

                                              Return the successor state of a ConstrainedDiscreteIdentitySystem.

                                              Input

                                              • systemConstrainedDiscreteIdentitySystem
                                              • x – state (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                                              Output

                                              The same state x.

                                              source
                                              successor(system::LinearDiscreteSystem, x::AbstractVector)

                                              Return the successor state of a LinearDiscreteSystem.

                                              Input

                                              • systemLinearDiscreteSystem
                                              • x – state (it should be any vector type)

                                              Output

                                              The result of applying the system to x.

                                              source
                                              successor(system::AffineDiscreteSystem, x::AbstractVector)

                                              Return the successor state of a AffineDiscreteSystem.

                                              Input

                                              • systemAffineDiscreteSystem
                                              • x – state (it should be any vector type)

                                              Output

                                              The result of applying the system to x.

                                              source
                                              successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                                              Return the successor state of a LinearControlDiscreteSystem.

                                              Input

                                              • systemLinearControlDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • u – input (it should be any vector type)

                                              Output

                                              The result of applying the system to x, with input u.

                                              source
                                              successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                                              +          [check_constraints]=true)

                                              Return the successor state of a ConstrainedLinearDiscreteSystem.

                                              Input

                                              • systemConstrainedLinearDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                                              Output

                                              The result of applying the system to x.

                                              source
                                              successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                                              +          [check_constraints])

                                              Return the successor state of a ConstrainedAffineDiscreteSystem.

                                              Input

                                              • systemConstrainedAffineDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                                              Output

                                              The result of applying the system to x.

                                              source
                                              successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                                              +          u::AbstractVector; [check_constraints]=true)

                                              Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                                              Input

                                              • systemConstrainedLinearControlDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • u – input (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                              Output

                                              The result of applying the system to x, with input u.

                                              source
                                              successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                                              +          u::AbstractVector; [check_constraints]=true)

                                              Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                                              Input

                                              • systemConstrainedAffineControlDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • u – input (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                              Output

                                              The result of applying the system to x, with input u.

                                              source
                                              successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                                              Return the successor state of a BlackBoxDiscreteSystem.

                                              Input

                                              • systemBlackBoxDiscreteSystem
                                              • x – state (it should be any vector type)

                                              Output

                                              The result of applying the system to x.

                                              source
                                              successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                                              +          [check_constraints]=true)

                                              Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                                              Input

                                              • systemConstrainedBlackBoxDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                                              Output

                                              The result of applying the system to x.

                                              source
                                              successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                                              +          u::AbstractVector; [check_constraints]=true)

                                              Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                                              Input

                                              • systemConstrainedBlackBoxControlDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • u – input (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                                              Output

                                              The result of applying the system to x, with input u.

                                              source
                                              successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                                              +          w::AbstractVector; [check_constraints]=true)

                                              Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                                              Input

                                              • systemNoisyConstrainedLinearDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • w – noise (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                                              Output

                                              The result of applying the system to x, with noise w.

                                              source
                                              successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                                              +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                              Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                                              Input

                                              • systemNoisyConstrainedLinearControlDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • u – input (it should be any vector type)
                                              • w – noise (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                              Output

                                              The result of applying the system to x, with input u and noise w.

                                              source
                                              successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                                              +          u::AbstractVector; [check_constraints]=true)

                                              Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                                              Input

                                              • systemNoisyConstrainedAffineControlDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • u – input (it should be any vector type)
                                              • w – noise (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                              Output

                                              The result of applying the system to x, with input u and noise w.

                                              source
                                              successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                                              +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                              Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                                              Input

                                              • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                                              • x – state (it should be any vector type)
                                              • u – input (it should be any vector type)
                                              • w – noise (it should be any vector type)
                                              • check_constraints – (optional, default: true) check if the state belongs to the state set

                                              Output

                                              The result of applying the system to x, with input u and noise w.

                                              source
                                              diff --git a/v0.8.0/lib/types/index.html b/v0.8.0/lib/types/index.html new file mode 100644 index 00000000..14f9f7b6 --- /dev/null +++ b/v0.8.0/lib/types/index.html @@ -0,0 +1,92 @@ + +Types · MathematicalSystems.jl

                                              Types

                                              Types

                                              This section describes systems types implemented in MathematicalSystems.jl.

                                              Abstract Systems

                                              AbstractSystem

                                              Abstract supertype for all system types.

                                              source
                                              AbstractContinuousSystem

                                              Abstract supertype for all continuous system types.

                                              source
                                              AbstractDiscreteSystem

                                              Abstract supertype for all discrete system types.

                                              source

                                              Continuous Systems

                                              ContinuousIdentitySystem <: AbstractContinuousSystem

                                              Trivial identity continuous-time system of the form:

                                              \[ x' = 0.\]

                                              Fields

                                              • statedim – number of state variables
                                              source
                                              ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                              Trivial identity continuous-time system with state constraints of the form:

                                              \[ x' = 0, x(t) ∈ \mathcal{X}.\]

                                              Fields

                                              • statedim – number of state variables
                                              • X – state constraints
                                              source
                                              LinearContinuousSystem

                                              Continuous-time linear system of the form:

                                              \[ x' = A x.\]

                                              Fields

                                              • A – square matrix
                                              source
                                              AffineContinuousSystem

                                              Continuous-time affine system of the form:

                                              \[ x' = A x + b.\]

                                              Fields

                                              • A – square matrix
                                              • b – vector
                                              source
                                              LinearControlContinuousSystem

                                              Continuous-time linear control system of the form:

                                              \[ x' = A x + B u.\]

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              source
                                              ConstrainedLinearContinuousSystem

                                              Continuous-time linear system with state constraints of the form:

                                              \[ x' = A x, x(t) ∈ \mathcal{X}.\]

                                              Fields

                                              • A – square matrix
                                              • X – state constraints
                                              source
                                              ConstrainedAffineContinuousSystem

                                              Continuous-time affine system with state constraints of the form:

                                              \[ x' = A x + b, x(t) ∈ \mathcal{X}.\]

                                              Fields

                                              • A – square matrix
                                              • b – vector
                                              • X – state constraints
                                              source
                                              ConstrainedAffineControlContinuousSystem

                                              Continuous-time affine control system with state constraints of the form:

                                              \[ x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

                                              and $c$ a vector.

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              • c – vector
                                              • X – state constraints
                                              • U – input constraints
                                              source
                                              ConstrainedLinearControlContinuousSystem

                                              Continuous-time linear control system with state constraints of the form:

                                              \[ x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              • X – state constraints
                                              • U – input constraints
                                              source
                                              LinearAlgebraicContinuousSystem

                                              Continuous-time linear algebraic system of the form:

                                              \[ E x' = A x.\]

                                              Fields

                                              • A – matrix
                                              • E – matrix, same size as A
                                              source
                                              ConstrainedLinearAlgebraicContinuousSystem

                                              Continuous-time linear system with state constraints of the form:

                                              \[ E x' = A x, x(t) ∈ \mathcal{X}.\]

                                              Fields

                                              • A – matrix
                                              • E – matrix, same size as A
                                              • X – state constraints
                                              source
                                              PolynomialContinuousSystem

                                              Continuous-time polynomial system of the form:

                                              \[ x' = p(x).\]

                                              Fields

                                              • p – polynomial vector field
                                              • statedim – number of state variables
                                              source
                                              ConstrainedPolynomialContinuousSystem

                                              Continuous-time polynomial system with state constraints:

                                              \[ x' = p(x), x(t) ∈ \mathcal{X}\]

                                              Fields

                                              • p – polynomial vector field
                                              • X – constraint set
                                              • statedim – number of state variables
                                              source
                                              BlackBoxContinuousSystem <: AbstractContinuousSystem

                                              Continuous-time system defined by a right-hand side of the form:

                                              \[ x' = f(x(t))\]

                                              Fields

                                              • f – function that holds the right-hand side
                                              • statedim – number of state variables
                                              source
                                              ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                                              Continuous-time system defined by a right-hand side with state constraints of the form:

                                              \[ x' = f(x(t)), x(t) ∈ \mathcal{X}.\]

                                              Fields

                                              • f – function that holds the right-hand side
                                              • statedim – number of state variables
                                              • X – state constraints
                                              source
                                              ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                              Continuous-time control system defined by a right-hand side with state and input constraints of the form:

                                              \[ x' = f(x(t), u(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}.\]

                                              Fields

                                              • f – function that holds the right-hand side
                                              • statedim – number of state variables
                                              • inputdim – number of input variables
                                              • X – state constraints
                                              • U – input constraints
                                              source
                                              NoisyConstrainedLinearContinuousSystem

                                              Continuous-time linear system with additive disturbance and state constraints of the form:

                                              \[ x' = A x + D w, x(t) ∈ \mathcal{X}, w(t) ∈ \mathcal{W}.\]

                                              Fields

                                              • A – square matrix
                                              • D – matrix
                                              • X – state constraints
                                              • W – disturbance set
                                              source
                                              NoisyConstrainedLinearControlContinuousSystem

                                              Continuous-time affine control system with state constraints of the form:

                                              \[ x' = A x + B u + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                                              and $c$ a vector.

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              • D – matrix
                                              • X – state constraints
                                              • U – input constraints
                                              • W – disturbance set
                                              source
                                              NoisyConstrainedAffineControlContinuousSystem

                                              Continuous-time affine control system with state constraints of the form:

                                              \[ x' = A x + B u + c + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                                              and $c$ a vector.

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              • c – vector
                                              • D – matrix
                                              • X – state constraints
                                              • U – input constraints
                                              • W – disturbance set
                                              source
                                              NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                              Continuous-time control system defined by a right-hand side with state constraints of the form:

                                              \[ x' = f(x(t), u(t), w(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W}.\]

                                              Fields

                                              • f – function that holds the right-hand side
                                              • statedim – number of state variables
                                              • inputdim – number of input variables
                                              • X – state constraints
                                              • U – input constraints
                                              • W – disturbance set
                                              source

                                              Discrete Systems

                                              DiscreteIdentitySystem <: AbstractDiscreteSystem

                                              Trivial identity discrete-time system of the form:

                                              \[ x_{k+1} = x_k.\]

                                              Fields

                                              • statedim – number of state variables
                                              source
                                              ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                              Trivial identity discrete-time system with state constraints of the form:

                                              \[ x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]

                                              Fields

                                              • statedim – number of state variables
                                              • X – state constraints
                                              source
                                              LinearDiscreteSystem

                                              Discrete-time linear system of the form:

                                              \[ x_{k+1} = A x_k.\]

                                              Fields

                                              • A – square matrix
                                              source
                                              AffineDiscreteSystem

                                              Discrete-time affine system of the form:

                                              \[ x_{k+1} = A x_k + b.\]

                                              Fields

                                              • A – square matrix
                                              • b – vector
                                              source
                                              LinearControlDiscreteSystem

                                              Discrete-time linear control system of the form:

                                              \[ x_{k+1} = A x_k + B u_k.\]

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              source
                                              ConstrainedLinearDiscreteSystem

                                              Discrete-time linear system with state constraints of the form:

                                              \[ x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                              Fields

                                              • A – square matrix
                                              • X – state constraints
                                              source
                                              ConstrainedAffineDiscreteSystem

                                              Discrete-time affine system with state constraints of the form:

                                              \[ x_{k+1} = A x_k + b, x_k ∈ \mathcal{X} \text{ for all } k.\]

                                              Fields

                                              • A – square matrix
                                              • b – vector
                                              • X – state constraints
                                              source
                                              ConstrainedLinearControlDiscreteSystem

                                              Discrete-time linear control system with state constraints of the form:

                                              \[ x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              • X – state constraints
                                              • U – input constraints
                                              source
                                              ConstrainedAffineControlDiscreteSystem

                                              Continuous-time affine control system with state constraints of the form:

                                              \[ x_{k+1} = A x_k + B u_k + c, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k,\]

                                              and $c$ a vector.

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              • c – vector
                                              • X – state constraints
                                              • U – input constraints
                                              source
                                              LinearAlgebraicDiscreteSystem

                                              Discrete-time linear algebraic system of the form:

                                              \[ E x_{k+1} = A x_k.\]

                                              Fields

                                              • A – matrix
                                              • E – matrix, same size as A
                                              source
                                              ConstrainedLinearAlgebraicDiscreteSystem

                                              Discrete-time linear system with state constraints of the form:

                                              \[ E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                              Fields

                                              • A – matrix
                                              • E – matrix, same size as A
                                              • X – state constraints
                                              source
                                              PolynomialDiscreteSystem

                                              Discrete-time polynomial system of the form:

                                              \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                              Fields

                                              • p – polynomial vector field
                                              • statedim – number of state variables
                                              source
                                              ConstrainedPolynomialDiscreteSystem

                                              Discrete-time polynomial system with state constraints:

                                              \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                              Fields

                                              • p – polynomial
                                              • X – constraint set
                                              • statedim – number of state variables
                                              source
                                              BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                              Discrete-time system defined by a right-hand side of the form:

                                              \[ x_{k+1} = f(x_k)\]

                                              Fields

                                              • f – function that holds the right-hand side
                                              • statedim – number of state variables
                                              source
                                              ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                              Discrete-time system defined by a right-hand side with state constraints of the form:

                                              \[ x_{k+1} = f(x_k), x_k ∈ \mathcal{X}.\]

                                              Fields

                                              • f – function that holds the right-hand side
                                              • statedim – number of state variables
                                              • X – state constraints
                                              source
                                              ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                              Discrete-time control system defined by a right-hand side with state and input constraints of the form:

                                              \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}.\]

                                              Fields

                                              • f – function that holds the right-hand side
                                              • statedim – number of state variables
                                              • inputdim – number of input variables
                                              • X – state constraints
                                              • U – input constraints
                                              source
                                              NoisyConstrainedLinearDiscreteSystem

                                              Discrete-time linear system with additive disturbance and state constraints of the form:

                                              \[ x_{k+1} = A x_k + D w_k, x_k ∈ \mathcal{X}, w(t) ∈ \mathcal{W} .\]

                                              Fields

                                              • A – square matrix
                                              • D – matrix
                                              • X – state constraints
                                              • W – disturbance set
                                              source
                                              NoisyConstrainedLinearControlDiscreteSystem

                                              Continuous-time affine control system with state constraints of the form:

                                              \[ x_{k+1} = A x_k + B u_k + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                                              and $c$ a vector.

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              • D – matrix
                                              • X – state constraints
                                              • U – input constraints
                                              • W – disturbance set
                                              source
                                              NoisyConstrainedAffineControlDiscreteSystem

                                              Continuous-time affine control system with state constraints of the form:

                                              \[ x_{k+1} = A x_k + B u_k + c + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                                              and $c$ a vector.

                                              Fields

                                              • A – square matrix
                                              • B – matrix
                                              • c – vector
                                              • D – matrix
                                              • X – state constraints
                                              • U – input constraints
                                              • W – disturbance set
                                              source
                                              NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                              Discrete-time control system defined by a right-hand side with state constraints of the form:

                                              \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W}.\]

                                              Fields

                                              • f – function that holds the right-hand side
                                              • statedim – number of state variables
                                              • inputdim – number of input variables
                                              • X – state constraints
                                              • U – input constraints
                                              • W – disturbance set
                                              source

                                              Identity operator

                                              IdentityMultiple{T} < AbstractMatrix{T} where T

                                              A scalar multiple of the identity matrix of given order and numeric type.

                                              Fields

                                              • M – uniform scaling operator of type T
                                              • n – size of the identity matrix

                                              Notes

                                              This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                                              Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                                              The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                                              Examples

                                              The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                                              julia> using MathematicalSystems: IdentityMultiple
                                              +
                                              +julia> I2 = I(2)
                                              +IdentityMultiple{Float64} of value 1.0 and order 2
                                              +
                                              +julia> I2 + I2
                                              +IdentityMultiple{Float64} of value 2.0 and order 2
                                              +
                                              +julia> 4*I2
                                              +IdentityMultiple{Float64} of value 4.0 and order 2

                                              The numeric type (default Float64) can be passed as a second argument:

                                              julia> I2r = I(2, Rational{Int})
                                              +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                                              +
                                              +julia> I2r + I2r
                                              +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                              +
                                              +julia> 4*I2r
                                              +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                                              To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in

                                              julia> I2 = I(2.0, 2)
                                              +IdentityMultiple{Float64} of value 2.0 and order 2
                                              +
                                              +julia> I2r = I(2//1, 2)
                                              +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                                              Or use the lower level constructor passing the UniformScaling (I):

                                              julia> I2 = IdentityMultiple(2.0*I, 2)
                                              +IdentityMultiple{Float64} of value 2.0 and order 2
                                              +
                                              +julia> I2r = IdentityMultiple(2//1*I, 2)
                                              +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                              source

                                              Initial Value Problems

                                              InitialValueProblem

                                              Parametric composite type for initial value problems. It is parameterized in the system's type.

                                              Fields

                                              • s – system
                                              • x0 – initial state

                                              Examples

                                              The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

                                              julia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);
                                              +
                                              +julia> p.x0
                                              +2-element Array{Float64,1}:
                                              + -0.5
                                              +  0.5
                                              +
                                              +julia> statedim(p)
                                              +2
                                              +
                                              +julia> inputdim(p)
                                              +0
                                              source
                                              IVP

                                              IVP is an alias for InitialValueProblem.

                                              source

                                              Input Types

                                              AbstractInput

                                              Abstract supertype for all input types.

                                              Notes

                                              The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                              Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                              A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                              source
                                              ConstantInput{UT} <: AbstractInput

                                              Type representing an input that remains constant in time.

                                              Fields

                                              • U – input set

                                              Examples

                                              The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                              julia> c = ConstantInput(-1//2)
                                              +ConstantInput{Rational{Int64}}(-1//2)
                                              +
                                              +julia> iterate(c, 1)
                                              +(-1//2, nothing)
                                              +
                                              +julia> iterate(c, 2)
                                              +(-1//2, nothing)
                                              +
                                              +julia> collect(nextinput(c, 4))
                                              +4-element Array{Rational{Int64},1}:
                                              + -1//2
                                              + -1//2
                                              + -1//2
                                              + -1//2

                                              The elements of this input are rational numbers:

                                              julia> eltype(c)
                                              +Rational{Int64}

                                              To transform a constant input, you can use map as in:

                                              julia> map(x->2*x, c)
                                              +ConstantInput{Rational{Int64}}(-1//1)
                                              source
                                              VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                                              Type representing an input that may vary with time.

                                              Fields

                                              • U – vector of input sets

                                              Examples

                                              The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                              julia> v = VaryingInput([-1//2, 1//2])
                                              +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                                              +
                                              +julia> length(v)
                                              +2
                                              +
                                              +julia> eltype(v)
                                              +Rational{Int64}

                                              Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                              julia> iterate(v, 1)
                                              +(-1//2, 2)
                                              +
                                              +julia> iterate(v, 2)
                                              +(1//2, 3)

                                              The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                              julia> typeof(nextinput(v))
                                              +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                                              +
                                              +julia> collect(nextinput(v, 1))
                                              +1-element Array{Rational{Int64},1}:
                                              + -1//2
                                              +
                                              +julia> collect(nextinput(v, 2))
                                              +2-element Array{Rational{Int64},1}:
                                              + -1//2
                                              +  1//2

                                              You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                              julia> collect(v)
                                              +2-element Array{Rational{Int64},1}:
                                              + -1//2
                                              +  1//2
                                              +
                                              +julia> [2*vi for vi in v]
                                              +2-element Array{Rational{Int64},1}:
                                              + -1//1
                                              +  1//1

                                              Since this input type is finite, querying more elements than its length returns the full vector:

                                              julia> collect(nextinput(v, 4))
                                              +2-element Array{Rational{Int64},1}:
                                              + -1//2
                                              +  1//2

                                              To transform a varying input, you can use map as in:

                                              julia> map(x->2*x, v)
                                              +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                                              source

                                              Maps

                                              AbstractMap

                                              Abstract supertype for all map types.

                                              source
                                              IdentityMap

                                              An identity map,

                                              \[ x ↦ x.\]

                                              Fields

                                              • dim – dimension
                                              source
                                              ConstrainedIdentityMap

                                              An identity map with state constraints of the form:

                                              \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                                              Fields

                                              • dim – dimension
                                              • X – state constraints
                                              source
                                              LinearMap

                                              A linear map,

                                              \[ x ↦ Ax\]

                                              Fields

                                              • A – matrix
                                              source
                                              ConstrainedLinearMap

                                              A linear map with state constraints of the form:

                                              \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                                              Fields

                                              • A – matrix
                                              • X – state constraints
                                              source
                                              AffineMap

                                              An affine map,

                                              \[ x ↦ Ax + b.\]

                                              Fields

                                              • A – matrix
                                              • b – vector
                                              source
                                              ConstrainedAffineMap

                                              An affine map with state constraints of the form:

                                              \[ x ↦ Ax + b, x(t) ∈ \mathcal{X}.\]

                                              Fields

                                              • A – matrix
                                              • b – vector
                                              • X – state constraints
                                              source
                                              LinearControlMap

                                              A linear control map,

                                              \[ (x, u) ↦ Ax + Bu.\]

                                              Fields

                                              • A – matrix
                                              • B – matrix
                                              source
                                              ConstrainedLinearControlMap

                                              A linear control map with state and input constraints,

                                              \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                              Fields

                                              • A – matrix
                                              • B – matrix
                                              • X – state constraints
                                              • U – input constraints
                                              source
                                              AffineControlMap

                                              An affine control map,

                                              \[ (x, u) ↦ Ax + Bu + c.\]

                                              Fields

                                              • A – matrix
                                              • B – matrix
                                              • c – vector
                                              source
                                              ConstrainedAffineControlMap

                                              An affine control map with state and input constraints,

                                              \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                              Fields

                                              • A – matrix
                                              • B – matrix
                                              • c – vector
                                              • X – state constraints
                                              • U – input constraints
                                              source
                                              ResetMap

                                              A reset map,

                                              \[ x ↦ R(x),\]

                                              such that a subset of the variables is given a specified value, and the rest are unchanged.

                                              Fields

                                              • dim – dimension
                                              • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                              source
                                              ConstrainedResetMap

                                              A reset map with state constraints of the form:

                                              \[ x ↦ R(x), x ∈ \mathcal{X},\]

                                              such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                                              Fields

                                              • dim – dimension
                                              • X – state constraints
                                              • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                              source

                                              Macros

                                              map(ex, args)

                                              Returns an instance of the map type corresponding to the given expression.

                                              Input

                                              • ex – an expression defining the map, in the form of an anonymous function
                                              • args – additional optional arguments

                                              Output

                                              A map that best matches the given expression.

                                              Examples

                                              Let us first create a linear map using this macro:

                                              julia> @map x -> [1 0; 0 0]*x
                                              +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                                              We can create an affine system as well:

                                              julia> @map x -> [1 0; 0 0]*x + [2, 0]
                                              +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                                              Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:

                                              julia> @map(x -> x, dim=5)
                                              +IdentityMap(5)

                                              An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                                              julia> @map x -> I(5)*x
                                              +IdentityMap(5)
                                              source

                                              Systems with output

                                              SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                                              Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                              Fields

                                              • s – system of type ST
                                              • outputmap – output map of type MT
                                              source
                                              LinearTimeInvariantSystem(A, B, C, D)

                                              A linear time-invariant system with of the form

                                              \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                                              Input

                                              • A – matrix
                                              • B – matrix
                                              • C – matrix
                                              • D – matrix

                                              Output

                                              A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                              source
                                              LinearTimeInvariantSystem(A, B, C, D, X, U)

                                              A linear time-invariant system with state and input constraints of the form

                                              \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                                              where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                              Input

                                              • A – matrix
                                              • B – matrix
                                              • C – matrix
                                              • D – matrix
                                              • X – state constraints
                                              • U – input constraints

                                              Output

                                              A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                              source
                                              LTISystem

                                              LTISystem is an alias for LinearTimeInvariantSystem.

                                              source
                                              diff --git a/v0.8.0/search/index.html b/v0.8.0/search/index.html new file mode 100644 index 00000000..9cf191e7 --- /dev/null +++ b/v0.8.0/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                              Search

                                              Search

                                              Number of results: loading...

                                                diff --git a/v0.8.0/search_index.js b/v0.8.0/search_index.js new file mode 100644 index 00000000..e03b2e7f --- /dev/null +++ b/v0.8.0/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x = 0\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form:\n\n x = 0 x(t) mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x = A x\n\nFields\n\nA – square matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x = A x + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n x = A x x(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form:\n\n x = A x + b x(t) mathcalX\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form:\n\n x = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n E x = A x x(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x = p(x)\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints:\n\n x = p(x) x(t) mathcalX\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x = f(x(t))\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t)) x(t) mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state and input constraints of the form:\n\n x = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and state constraints of the form:\n\n x = A x + D w x(t) mathcalX w(t) mathcalW\n\nFields\n\nA – square matrix\nD – matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t) u(t) w(t)) x(t) mathcalX u(t) mathcalU w(t) mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form:\n\n x_k+1 = x_k x_k mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with state constraints of the form:\n\n x_k+1 = A x_k + b x_k mathcalX text for all k\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c x_k mathcalX u_k mathcalU text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n E x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k)\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state and input constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and state constraints of the form:\n\n x_k+1 = A x_k + D w_k x_k mathcalX w(t) mathcalW \n\nFields\n\nA – square matrix\nD – matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU w_k mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the lower level constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system's type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + b\n\nFields\n\nA – matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + b x(t) mathcalX\n\nFields\n\nA – matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturns an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe criterion refers to the type information, not the value. Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"}] +} diff --git a/v0.8.0/siteinfo.js b/v0.8.0/siteinfo.js new file mode 100644 index 00000000..9d15fd0c --- /dev/null +++ b/v0.8.0/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.8.0"; diff --git a/v0.8.1/about/index.html b/v0.8.1/about/index.html new file mode 100644 index 00000000..9c42e9c3 --- /dev/null +++ b/v0.8.1/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                                About

                                                About

                                                This page contains some general information about this project, and recommendations about contributing.

                                                Contributing

                                                If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                                Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                                Branches and pull requests (PR)

                                                We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                                Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                                Unit testing and continuous integration (CI)

                                                This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                                When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                                $ julia --color=yes test/runtests.jl

                                                Alternatively, you can achieve the same from inside the REPL using the following command:

                                                julia> Pkg.test("MathematicalSystems")

                                                We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                                Contributing to the documentation

                                                New functions and types should be documented according to our guidelines directly in the source code.

                                                You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                                julia> ?LinearContinuousSystem

                                                This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                                To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                                $ julia --color=yes docs/make.jl

                                                Note that this also runs all doctests which will take some time.

                                                Related projects

                                                This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                                Below we list more related projects.

                                                Package nameDescription
                                                HybridSystems.jlHybrid Systems definitions in Julia.
                                                LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                                ControlToolbox.jlAnalysis and design tools for control systems.
                                                ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                                DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                                ControlSystems.jlA Control Systems Toolbox for Julia
                                                ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                                Credits

                                                These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                                diff --git a/v0.8.1/assets/arrow.svg b/v0.8.1/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.8.1/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.8.1/assets/documenter.css b/v0.8.1/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.8.1/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                                the is very first thing on the page (i.e. the second element + * in the
                                                , * after the
                                                , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                                 surrounding the , while
                                                + * highlight.js applies the .hljs style directly to the  tag.
                                                + */
                                                +.hljs {
                                                +    background-color: transparent;
                                                +    padding: 0;
                                                +}
                                                +
                                                +@media only screen and (max-width: 768px) {
                                                +    nav.toc {
                                                +        position: fixed;
                                                +        width: 16em;
                                                +        left: -16em;
                                                +        -webkit-overflow-scrolling: touch;
                                                +        -webkit-transition-property: left; /* Safari */
                                                +        -webkit-transition-duration: 0.3s; /* Safari */
                                                +        transition-property: left;
                                                +        transition-duration: 0.3s;
                                                +        -webkit-transition-timing-function: ease-out; /* Safari */
                                                +        transition-timing-function: ease-out;
                                                +        z-index: 2;
                                                +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                                                +    }
                                                +
                                                +    nav.toc.show {
                                                +        left: 0;
                                                +    }
                                                +
                                                +    article {
                                                +        margin-left: 0;
                                                +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                                +        overflow-wrap: break-word;
                                                +    }
                                                +
                                                +    article > header {
                                                +        position: fixed;
                                                +        left: 0;
                                                +        z-index: 1;
                                                +    }
                                                +
                                                +    article > header nav, hr {
                                                +        display: none;
                                                +    }
                                                +
                                                +    article > header div#topbar {
                                                +        display: block; /* is mobile */
                                                +        position: fixed;
                                                +        width: 100%;
                                                +        height: 1.5em;
                                                +        padding-top: 1em;
                                                +        padding-bottom: 1em;
                                                +        background-color: #fcfcfc;
                                                +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                                +        top: 0;
                                                +        -webkit-transition-property: top; /* Safari */
                                                +        -webkit-transition-duration: 0.3s; /* Safari */
                                                +        transition-property: top;
                                                +        transition-duration: 0.3s;
                                                +    }
                                                +
                                                +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                                +        top: -4em;
                                                +        -webkit-transition-property: top; /* Safari */
                                                +        -webkit-transition-duration: 0.7s; /* Safari */
                                                +        transition-property: top;
                                                +        transition-duration: 0.7s;
                                                +    }
                                                +
                                                +    article > header div#topbar span {
                                                +        width: 80%;
                                                +        height: 1.5em;
                                                +        margin-top: -0.1em;
                                                +        margin-left: 0.9em;
                                                +        font-size: 1.2em;
                                                +        overflow: hidden;
                                                +    }
                                                +
                                                +    article > header div#topbar a.fa-bars {
                                                +        float: right;
                                                +        padding: 0.6em;
                                                +        margin-top: -0.6em;
                                                +        margin-right: 0.3em;
                                                +        font-size: 1.5em;
                                                +    }
                                                +
                                                +    article > header div#topbar a.fa-bars:visited {
                                                +        color: #3091d1;
                                                +    }
                                                +
                                                +    article table {
                                                +        overflow-x: auto;
                                                +        display: block;
                                                +    }
                                                +
                                                +    article div.MathJax_Display {
                                                +        overflow: scroll;
                                                +    }
                                                +
                                                +    article span.MathJax {
                                                +        overflow: hidden;
                                                +    }
                                                +}
                                                +
                                                +@media only screen and (max-width: 320px) {
                                                +    body {
                                                +        font-size: 15px;
                                                +    }
                                                +}
                                                diff --git a/v0.8.1/assets/documenter.js b/v0.8.1/assets/documenter.js
                                                new file mode 100644
                                                index 00000000..761ae294
                                                --- /dev/null
                                                +++ b/v0.8.1/assets/documenter.js
                                                @@ -0,0 +1,132 @@
                                                +/*
                                                + * Part of Documenter.jl
                                                + *     https://github.com/JuliaDocs/Documenter.jl
                                                + *
                                                + * License: MIT
                                                + */
                                                +
                                                +requirejs.config({
                                                +    paths: {
                                                +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                                +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                                +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                                +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                                +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                                +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                                +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                                +    },
                                                +    shim: {
                                                +        'mathjax' : {
                                                +            exports: "MathJax"
                                                +        },
                                                +        'highlight-julia': ['highlight'],
                                                +        'highlight-julia-repl': ['highlight'],
                                                +    }
                                                +});
                                                +
                                                +// Load MathJax
                                                +require(['mathjax'], function(MathJax) {
                                                +    MathJax.Hub.Config({
                                                +      "tex2jax": {
                                                +        inlineMath: [['$','$'], ['\\(','\\)']],
                                                +        processEscapes: true
                                                +      }
                                                +    });
                                                +    MathJax.Hub.Config({
                                                +      config: ["MMLorHTML.js"],
                                                +      jax: [
                                                +        "input/TeX",
                                                +        "output/HTML-CSS",
                                                +        "output/NativeMML"
                                                +      ],
                                                +      extensions: [
                                                +        "MathMenu.js",
                                                +        "MathZoom.js",
                                                +        "TeX/AMSmath.js",
                                                +        "TeX/AMSsymbols.js",
                                                +        "TeX/autobold.js",
                                                +        "TeX/autoload-all.js"
                                                +      ]
                                                +    });
                                                +    MathJax.Hub.Config({
                                                +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                                +    });
                                                +})
                                                +
                                                +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                                +    $(document).ready(function() {
                                                +        hljs.initHighlighting();
                                                +    })
                                                +
                                                +})
                                                +
                                                +// update the version selector with info from the siteinfo.js and ../versions.js files
                                                +require(['jquery'], function($) {
                                                +    $(document).ready(function() {
                                                +        var version_selector = $("#version-selector");
                                                +
                                                +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                                +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                                +            var option = $("");
                                                +            version_selector.append(option);
                                                +        }
                                                +
                                                +        if (typeof DOC_VERSIONS !== 'undefined') {
                                                +            var existing_versions = $('#version-selector > option');
                                                +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                                +            DOC_VERSIONS.forEach(function(each) {
                                                +                var version_url = documenterBaseURL + "/../" + each;
                                                +                var existing_id = $.inArray(each, existing_versions_texts);
                                                +                // if not already in the version selector, add it as a new option,
                                                +                // otherwise update the old option with the URL and enable it
                                                +                if (existing_id == -1) {
                                                +                    var option = $("");
                                                +                    version_selector.append(option);
                                                +                } else {
                                                +                    var option = existing_versions[existing_id];
                                                +                    option.value = version_url;
                                                +                    option.disabled = false;
                                                +                }
                                                +            });
                                                +        }
                                                +
                                                +        // only show the version selector if the selector has been populated
                                                +        if ($('#version-selector > option').length > 0) {
                                                +            version_selector.css("visibility", "visible");
                                                +        }
                                                +
                                                +        // Scroll the navigation bar to the currently selected menu item
                                                +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                                                +    })
                                                +
                                                +})
                                                +
                                                +// mobile
                                                +require(['jquery', 'headroom'], function($, Headroom) {
                                                +    $(document).ready(function() {
                                                +        var navtoc = $("nav.toc");
                                                +        $("nav.toc li.current a.toctext").click(function() {
                                                +            navtoc.toggleClass('show');
                                                +        });
                                                +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                                +            ev.preventDefault();
                                                +            navtoc.toggleClass('show');
                                                +            if (navtoc.hasClass('show')) {
                                                +                var title = $("article > header div#topbar span").text();
                                                +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                                +            }
                                                +        });
                                                +        $("article#docs").bind('click', function(ev) {
                                                +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                                +                return;
                                                +            }
                                                +            if (navtoc.hasClass('show')) {
                                                +                navtoc.removeClass('show');
                                                +            }
                                                +        });
                                                +        if ($("article > header div#topbar").css('display') == 'block') {
                                                +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                                +            headroom.init();
                                                +        }
                                                +    })
                                                +})
                                                diff --git a/v0.8.1/assets/juliareach.css b/v0.8.1/assets/juliareach.css
                                                new file mode 100644
                                                index 00000000..64b0d92d
                                                --- /dev/null
                                                +++ b/v0.8.1/assets/juliareach.css
                                                @@ -0,0 +1,583 @@
                                                +/*
                                                + * The default CSS style for Documenter.jl generated sites
                                                + *
                                                + * Heavily inspired by the Julia Sphinx theme
                                                + *     https://github.com/JuliaLang/JuliaDoc
                                                + * which extends the sphinx_rtd_theme
                                                + *     https://github.com/snide/sphinx_rtd_theme
                                                + *
                                                + * Part of Documenter.jl
                                                + *     https://github.com/JuliaDocs/Documenter.jl
                                                + *
                                                + * License: MIT
                                                + */
                                                +
                                                +/* The original CSS is modified such that it right-justifies the text. */
                                                +
                                                +/* fonts */
                                                +body, input {
                                                +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                                +  font-size: 16px;
                                                +  color: #222;
                                                +  text-rendering: optimizeLegibility;
                                                +}
                                                +
                                                +pre, code, kbd {
                                                +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                                +  font-size: 0.90em;
                                                +}
                                                +
                                                +pre code {
                                                +  font-size: 1em;
                                                +}
                                                +
                                                +a {
                                                +    color: #2980b9;
                                                +    text-decoration: none;
                                                +}
                                                +
                                                +a:hover {
                                                +    color: #3091d1;
                                                +}
                                                +
                                                +a:visited {
                                                +    color: #9b59b6;
                                                +}
                                                +
                                                +body {
                                                +    line-height: 1.5;
                                                +}
                                                +
                                                +h1 {
                                                +    font-size: 1.75em;
                                                +}
                                                +
                                                +/* Unless the 

                                                the is very first thing on the page (i.e. the second element + * in the
                                                , * after the
                                                , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                                 surrounding the , while
                                                + * highlight.js applies the .hljs style directly to the  tag.
                                                + */
                                                +.hljs {
                                                +    background-color: transparent;
                                                +    padding: 0;
                                                +}
                                                +
                                                +@media only screen and (max-width: 768px) {
                                                +    nav.toc {
                                                +        position: fixed;
                                                +        overflow-y: scroll;
                                                +        width: 16em;
                                                +        left: -16em;
                                                +        -webkit-overflow-scrolling: touch;
                                                +        -webkit-transition-property: left; /* Safari */
                                                +        -webkit-transition-duration: 0.3s; /* Safari */
                                                +        transition-property: left;
                                                +        transition-duration: 0.3s;
                                                +        -webkit-transition-timing-function: ease-out; /* Safari */
                                                +        transition-timing-function: ease-out;
                                                +        z-index: 2;
                                                +    }
                                                +
                                                +    nav.toc.show {
                                                +        left: 0;
                                                +    }
                                                +
                                                +    article {
                                                +        margin-left: 0;
                                                +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                                +        overflow-wrap: break-word;
                                                +    }
                                                +
                                                +    article > header {
                                                +        position: fixed;
                                                +        left: 0;
                                                +        z-index: 1;
                                                +    }
                                                +
                                                +    article > header nav, hr {
                                                +        display: none;
                                                +    }
                                                +
                                                +    article > header div#topbar {
                                                +        display: block; /* is mobile */
                                                +        position: fixed;
                                                +        width: 100%;
                                                +        height: 1.5em;
                                                +        padding-top: 1em;
                                                +        padding-bottom: 1em;
                                                +        background-color: #fcfcfc;
                                                +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                                +        top: 0;
                                                +        -webkit-transition-property: top; /* Safari */
                                                +        -webkit-transition-duration: 0.3s; /* Safari */
                                                +        transition-property: top;
                                                +        transition-duration: 0.3s;
                                                +    }
                                                +
                                                +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                                +        top: -4em;
                                                +        -webkit-transition-property: top; /* Safari */
                                                +        -webkit-transition-duration: 0.7s; /* Safari */
                                                +        transition-property: top;
                                                +        transition-duration: 0.7s;
                                                +    }
                                                +
                                                +    article > header div#topbar span {
                                                +        position: fixed;
                                                +        width: 80%;
                                                +        height: 1.5em;
                                                +        margin-top: -0.1em;
                                                +        margin-left: 0.9em;
                                                +        font-size: 1.2em;
                                                +        overflow: hidden;
                                                +    }
                                                +
                                                +    article > header div#topbar a.fa-bars {
                                                +        float: right;
                                                +        padding: 0.6em;
                                                +        margin-top: -0.6em;
                                                +        margin-right: 0.3em;
                                                +        font-size: 1.5em;
                                                +    }
                                                +
                                                +    article > header div#topbar a.fa-bars:visited {
                                                +        color: #3091d1;
                                                +    }
                                                +
                                                +    article table {
                                                +        overflow-x: auto;
                                                +        display: block;
                                                +    }
                                                +
                                                +    article div.MathJax_Display {
                                                +        overflow: scroll;
                                                +    }
                                                +
                                                +    article span.MathJax {
                                                +        overflow: hidden;
                                                +    }
                                                +}
                                                +
                                                +@media only screen and (max-width: 320px) {
                                                +    body {
                                                +        font-size: 15px;
                                                +    }
                                                +}
                                                diff --git a/v0.8.1/assets/search.js b/v0.8.1/assets/search.js
                                                new file mode 100644
                                                index 00000000..5d32c3aa
                                                --- /dev/null
                                                +++ b/v0.8.1/assets/search.js
                                                @@ -0,0 +1,250 @@
                                                +/*
                                                + * Part of Documenter.jl
                                                + *     https://github.com/JuliaDocs/Documenter.jl
                                                + *
                                                + * License: MIT
                                                + */
                                                +
                                                +// parseUri 1.2.2
                                                +// (c) Steven Levithan 
                                                +// MIT License
                                                +function parseUri (str) {
                                                +	var	o   = parseUri.options,
                                                +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                                +		uri = {},
                                                +		i   = 14;
                                                +
                                                +	while (i--) uri[o.key[i]] = m[i] || "";
                                                +
                                                +	uri[o.q.name] = {};
                                                +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                                +		if ($1) uri[o.q.name][$1] = $2;
                                                +	});
                                                +
                                                +	return uri;
                                                +};
                                                +parseUri.options = {
                                                +	strictMode: false,
                                                +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                                +	q:   {
                                                +		name:   "queryKey",
                                                +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                                +	},
                                                +	parser: {
                                                +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                                +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                                +	}
                                                +};
                                                +
                                                +requirejs.config({
                                                +    paths: {
                                                +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                                +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                                                +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                                                +    }
                                                +});
                                                +
                                                +var currentScript = document.currentScript;
                                                +
                                                +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                                +    $("#search-form").submit(function(e) {
                                                +        e.preventDefault()
                                                +    })
                                                +
                                                +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                                +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                                +    // ideally we'd just filter the original list but it's not available as a variable
                                                +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                                +        'a',
                                                +        'able',
                                                +        'about',
                                                +        'across',
                                                +        'after',
                                                +        'almost',
                                                +        'also',
                                                +        'am',
                                                +        'among',
                                                +        'an',
                                                +        'and',
                                                +        'are',
                                                +        'as',
                                                +        'at',
                                                +        'be',
                                                +        'because',
                                                +        'been',
                                                +        'but',
                                                +        'by',
                                                +        'can',
                                                +        'cannot',
                                                +        'could',
                                                +        'dear',
                                                +        'did',
                                                +        'does',
                                                +        'either',
                                                +        'ever',
                                                +        'every',
                                                +        'from',
                                                +        'got',
                                                +        'had',
                                                +        'has',
                                                +        'have',
                                                +        'he',
                                                +        'her',
                                                +        'hers',
                                                +        'him',
                                                +        'his',
                                                +        'how',
                                                +        'however',
                                                +        'i',
                                                +        'if',
                                                +        'into',
                                                +        'it',
                                                +        'its',
                                                +        'just',
                                                +        'least',
                                                +        'like',
                                                +        'likely',
                                                +        'may',
                                                +        'me',
                                                +        'might',
                                                +        'most',
                                                +        'must',
                                                +        'my',
                                                +        'neither',
                                                +        'no',
                                                +        'nor',
                                                +        'not',
                                                +        'of',
                                                +        'off',
                                                +        'often',
                                                +        'on',
                                                +        'only',
                                                +        'or',
                                                +        'other',
                                                +        'our',
                                                +        'own',
                                                +        'rather',
                                                +        'said',
                                                +        'say',
                                                +        'says',
                                                +        'she',
                                                +        'should',
                                                +        'since',
                                                +        'so',
                                                +        'some',
                                                +        'than',
                                                +        'that',
                                                +        'the',
                                                +        'their',
                                                +        'them',
                                                +        'then',
                                                +        'there',
                                                +        'these',
                                                +        'they',
                                                +        'this',
                                                +        'tis',
                                                +        'to',
                                                +        'too',
                                                +        'twas',
                                                +        'us',
                                                +        'wants',
                                                +        'was',
                                                +        'we',
                                                +        'were',
                                                +        'what',
                                                +        'when',
                                                +        'who',
                                                +        'whom',
                                                +        'why',
                                                +        'will',
                                                +        'would',
                                                +        'yet',
                                                +        'you',
                                                +        'your'
                                                +        ])
                                                +
                                                +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                                +    // would not find anything if searching for "add!", only for the entire qualification
                                                +    lunr.tokenizer.separator = /[\s\-\.]+/
                                                +
                                                +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                                +    lunr.trimmer = function (token) {
                                                +        return token.update(function (s) {
                                                +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                                +        })
                                                +    }
                                                +
                                                +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                                +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                                +
                                                +    var index = lunr(function () {
                                                +        this.ref('location')
                                                +        this.field('title')
                                                +        this.field('text')
                                                +        documenterSearchIndex['docs'].forEach(function(e) {
                                                +            this.add(e)
                                                +        }, this)
                                                +    })
                                                +    var store = {}
                                                +
                                                +    documenterSearchIndex['docs'].forEach(function(e) {
                                                +        store[e.location] = {title: e.title, category: e.category}
                                                +    })
                                                +
                                                +    $(function(){
                                                +        function update_search(querystring) {
                                                +            tokens = lunr.tokenizer(querystring)
                                                +            results = index.query(function (q) {
                                                +                tokens.forEach(function (t) {
                                                +                    q.term(t.toString(), {
                                                +                        fields: ["title"],
                                                +                        boost: 100,
                                                +                        usePipeline: false,
                                                +                        editDistance: 0,
                                                +                        wildcard: lunr.Query.wildcard.NONE
                                                +                    })
                                                +                    q.term(t.toString(), {
                                                +                        fields: ["title"],
                                                +                        boost: 10,
                                                +                        usePipeline: false,
                                                +                        editDistance: 2,
                                                +                        wildcard: lunr.Query.wildcard.NONE
                                                +                    })
                                                +                    q.term(t.toString(), {
                                                +                        fields: ["text"],
                                                +                        boost: 1,
                                                +                        usePipeline: true,
                                                +                        editDistance: 0,
                                                +                        wildcard: lunr.Query.wildcard.NONE
                                                +                    })
                                                +                })
                                                +            })
                                                +            $('#search-info').text("Number of results: " + results.length)
                                                +            $('#search-results').empty()
                                                +            results.forEach(function(result) {
                                                +                data = store[result.ref]
                                                +                link = $('')
                                                +                link.text(data.title)
                                                +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                                +                cat = $('('+data.category+')')
                                                +                li = $('
                                              • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.8.1/index.html b/v0.8.1/index.html new file mode 100644 index 00000000..9fc9db7b --- /dev/null +++ b/v0.8.1/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                                Home

                                                MathematicalSystems.jl

                                                MathematicalSystems is a Julia package for mathematical systems interfaces.

                                                Features

                                                • Generic and flexible systems definitions, while being fast and type stable.
                                                • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                                                • Iterator interfaces to handle constant or time-varying inputs.

                                                Library Outline

                                                diff --git a/v0.8.1/lib/methods/index.html b/v0.8.1/lib/methods/index.html new file mode 100644 index 00000000..ae63894c --- /dev/null +++ b/v0.8.1/lib/methods/index.html @@ -0,0 +1,13 @@ + +Methods · MathematicalSystems.jl

                                                Methods

                                                Methods

                                                This section describes systems methods implemented in MathematicalSystems.jl.

                                                States

                                                statedim(s::AbstractSystem)

                                                Returns the dimension of the state space of system s.

                                                source
                                                stateset(s::AbstractSystem)

                                                Returns the set of allowed states of system s.

                                                source

                                                Inputs

                                                inputdim(s::AbstractSystem)

                                                Returns the dimension of the input space of system s.

                                                source
                                                inputset(s::AbstractSystem)

                                                Returns the set of allowed inputs of system s.

                                                source
                                                nextinput(input::ConstantInput, n::Int=1)

                                                Returns the first n elements of this input.

                                                Input

                                                • input – a constant input
                                                • n – (optional, default: 1) the number of desired elements

                                                Output

                                                A repeated iterator that generates n equal samples of this input.

                                                source
                                                nextinput(input::VaryingInput, n::Int=1)

                                                Returns the first n elements of this input.

                                                Input

                                                • input – varying input
                                                • n – (optional, default: 1) number of desired elements

                                                Output

                                                An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                                source

                                                Output

                                                outputdim(m::AbstractMap)

                                                Returns the dimension of the output space of the map m.

                                                source
                                                outputmap(s::SystemWithOutput)

                                                Returns the output map of a system with output.

                                                source

                                                Traits

                                                islinear(s::AbstractSystem)

                                                Specifies if the dynamics of system s is specified by linear equations.

                                                Notes

                                                We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                                                This function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                                                [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                                                source
                                                islinear(m::AbstractMap)

                                                Specifies if the map m is linear or not.

                                                Notes

                                                A map is linear if it preserves the operations of scalar multiplication and vector addition.

                                                source
                                                isaffine(s::AbstractSystem)

                                                Specifies if the dynamics of system s is specified by affine equations.

                                                Notes

                                                An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                                                This function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                                                source
                                                ispolynomial(s::AbstractSystem)

                                                Specifies if the dynamics of system s is specified by polynomial equations.

                                                The criterion refers to the type information, not the value. Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                                                source
                                                isaffine(m::AbstractMap)

                                                Specifies if the map m is affine or not.

                                                Notes

                                                An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                                                source

                                                Maps

                                                apply(m::AbstractMap, args...)

                                                Apply the rule specified by the map to the given arguments.

                                                source

                                                Successor

                                                successor(system::DiscreteIdentitySystem, x::AbstractVector)

                                                Return the successor state of a DiscreteIdentitySystem.

                                                Input

                                                • systemDiscreteIdentitySystem
                                                • x – state (it should be any vector type)

                                                Output

                                                The same state x.

                                                source
                                                successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                                                +          [check_constraints]=true)

                                                Return the successor state of a ConstrainedDiscreteIdentitySystem.

                                                Input

                                                • systemConstrainedDiscreteIdentitySystem
                                                • x – state (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                Output

                                                The same state x.

                                                source
                                                successor(system::LinearDiscreteSystem, x::AbstractVector)

                                                Return the successor state of a LinearDiscreteSystem.

                                                Input

                                                • systemLinearDiscreteSystem
                                                • x – state (it should be any vector type)

                                                Output

                                                The result of applying the system to x.

                                                source
                                                successor(system::AffineDiscreteSystem, x::AbstractVector)

                                                Return the successor state of a AffineDiscreteSystem.

                                                Input

                                                • systemAffineDiscreteSystem
                                                • x – state (it should be any vector type)

                                                Output

                                                The result of applying the system to x.

                                                source
                                                successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                                                Return the successor state of a LinearControlDiscreteSystem.

                                                Input

                                                • systemLinearControlDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • u – input (it should be any vector type)

                                                Output

                                                The result of applying the system to x, with input u.

                                                source
                                                successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                                                +          [check_constraints]=true)

                                                Return the successor state of a ConstrainedLinearDiscreteSystem.

                                                Input

                                                • systemConstrainedLinearDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                Output

                                                The result of applying the system to x.

                                                source
                                                successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                                                +          [check_constraints])

                                                Return the successor state of a ConstrainedAffineDiscreteSystem.

                                                Input

                                                • systemConstrainedAffineDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                Output

                                                The result of applying the system to x.

                                                source
                                                successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                                                +          u::AbstractVector; [check_constraints]=true)

                                                Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                                                Input

                                                • systemConstrainedLinearControlDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • u – input (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                                Output

                                                The result of applying the system to x, with input u.

                                                source
                                                successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                                                +          u::AbstractVector; [check_constraints]=true)

                                                Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                                                Input

                                                • systemConstrainedAffineControlDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • u – input (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                                Output

                                                The result of applying the system to x, with input u.

                                                source
                                                successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                                                Return the successor state of a BlackBoxDiscreteSystem.

                                                Input

                                                • systemBlackBoxDiscreteSystem
                                                • x – state (it should be any vector type)

                                                Output

                                                The result of applying the system to x.

                                                source
                                                successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                                                +          [check_constraints]=true)

                                                Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                                                Input

                                                • systemConstrainedBlackBoxDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                Output

                                                The result of applying the system to x.

                                                source
                                                successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                                                +          u::AbstractVector; [check_constraints]=true)

                                                Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                                                Input

                                                • systemConstrainedBlackBoxControlDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • u – input (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                Output

                                                The result of applying the system to x, with input u.

                                                source
                                                successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                                                +          w::AbstractVector; [check_constraints]=true)

                                                Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                                                Input

                                                • systemNoisyConstrainedLinearDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • w – noise (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                Output

                                                The result of applying the system to x, with noise w.

                                                source
                                                successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                                                +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                                Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                                                Input

                                                • systemNoisyConstrainedLinearControlDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • u – input (it should be any vector type)
                                                • w – noise (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                                Output

                                                The result of applying the system to x, with input u and noise w.

                                                source
                                                successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                                                +          u::AbstractVector; [check_constraints]=true)

                                                Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                                                Input

                                                • systemNoisyConstrainedAffineControlDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • u – input (it should be any vector type)
                                                • w – noise (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                                Output

                                                The result of applying the system to x, with input u and noise w.

                                                source
                                                successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                                                +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                                Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                                                Input

                                                • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                                                • x – state (it should be any vector type)
                                                • u – input (it should be any vector type)
                                                • w – noise (it should be any vector type)
                                                • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                Output

                                                The result of applying the system to x, with input u and noise w.

                                                source
                                                diff --git a/v0.8.1/lib/types/index.html b/v0.8.1/lib/types/index.html new file mode 100644 index 00000000..23286b84 --- /dev/null +++ b/v0.8.1/lib/types/index.html @@ -0,0 +1,92 @@ + +Types · MathematicalSystems.jl

                                                Types

                                                Types

                                                This section describes systems types implemented in MathematicalSystems.jl.

                                                Abstract Systems

                                                AbstractSystem

                                                Abstract supertype for all system types.

                                                source
                                                AbstractContinuousSystem

                                                Abstract supertype for all continuous system types.

                                                source
                                                AbstractDiscreteSystem

                                                Abstract supertype for all discrete system types.

                                                source

                                                Continuous Systems

                                                ContinuousIdentitySystem <: AbstractContinuousSystem

                                                Trivial identity continuous-time system of the form:

                                                \[ x' = 0.\]

                                                Fields

                                                • statedim – number of state variables
                                                source
                                                ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                                Trivial identity continuous-time system with state constraints of the form:

                                                \[ x' = 0, x(t) ∈ \mathcal{X}.\]

                                                Fields

                                                • statedim – number of state variables
                                                • X – state constraints
                                                source
                                                LinearContinuousSystem

                                                Continuous-time linear system of the form:

                                                \[ x' = A x.\]

                                                Fields

                                                • A – square matrix
                                                source
                                                AffineContinuousSystem

                                                Continuous-time affine system of the form:

                                                \[ x' = A x + b.\]

                                                Fields

                                                • A – square matrix
                                                • b – vector
                                                source
                                                LinearControlContinuousSystem

                                                Continuous-time linear control system of the form:

                                                \[ x' = A x + B u.\]

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                source
                                                ConstrainedLinearContinuousSystem

                                                Continuous-time linear system with state constraints of the form:

                                                \[ x' = A x, x(t) ∈ \mathcal{X}.\]

                                                Fields

                                                • A – square matrix
                                                • X – state constraints
                                                source
                                                ConstrainedAffineContinuousSystem

                                                Continuous-time affine system with state constraints of the form:

                                                \[ x' = A x + b, x(t) ∈ \mathcal{X}.\]

                                                Fields

                                                • A – square matrix
                                                • b – vector
                                                • X – state constraints
                                                source
                                                ConstrainedAffineControlContinuousSystem

                                                Continuous-time affine control system with state constraints of the form:

                                                \[ x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

                                                and $c$ a vector.

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                • c – vector
                                                • X – state constraints
                                                • U – input constraints
                                                source
                                                ConstrainedLinearControlContinuousSystem

                                                Continuous-time linear control system with state constraints of the form:

                                                \[ x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                • X – state constraints
                                                • U – input constraints
                                                source
                                                LinearAlgebraicContinuousSystem

                                                Continuous-time linear algebraic system of the form:

                                                \[ E x' = A x.\]

                                                Fields

                                                • A – matrix
                                                • E – matrix, same size as A
                                                source
                                                ConstrainedLinearAlgebraicContinuousSystem

                                                Continuous-time linear system with state constraints of the form:

                                                \[ E x' = A x, x(t) ∈ \mathcal{X}.\]

                                                Fields

                                                • A – matrix
                                                • E – matrix, same size as A
                                                • X – state constraints
                                                source
                                                PolynomialContinuousSystem

                                                Continuous-time polynomial system of the form:

                                                \[ x' = p(x).\]

                                                Fields

                                                • p – polynomial vector field
                                                • statedim – number of state variables
                                                source
                                                ConstrainedPolynomialContinuousSystem

                                                Continuous-time polynomial system with state constraints:

                                                \[ x' = p(x), x(t) ∈ \mathcal{X}\]

                                                Fields

                                                • p – polynomial vector field
                                                • X – constraint set
                                                • statedim – number of state variables
                                                source
                                                BlackBoxContinuousSystem <: AbstractContinuousSystem

                                                Continuous-time system defined by a right-hand side of the form:

                                                \[ x' = f(x(t))\]

                                                Fields

                                                • f – function that holds the right-hand side
                                                • statedim – number of state variables
                                                source
                                                ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                                                Continuous-time system defined by a right-hand side with state constraints of the form:

                                                \[ x' = f(x(t)), x(t) ∈ \mathcal{X}.\]

                                                Fields

                                                • f – function that holds the right-hand side
                                                • statedim – number of state variables
                                                • X – state constraints
                                                source
                                                ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                                Continuous-time control system defined by a right-hand side with state and input constraints of the form:

                                                \[ x' = f(x(t), u(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}.\]

                                                Fields

                                                • f – function that holds the right-hand side
                                                • statedim – number of state variables
                                                • inputdim – number of input variables
                                                • X – state constraints
                                                • U – input constraints
                                                source
                                                NoisyConstrainedLinearContinuousSystem

                                                Continuous-time linear system with additive disturbance and state constraints of the form:

                                                \[ x' = A x + D w, x(t) ∈ \mathcal{X}, w(t) ∈ \mathcal{W}.\]

                                                Fields

                                                • A – square matrix
                                                • D – matrix
                                                • X – state constraints
                                                • W – disturbance set
                                                source
                                                NoisyConstrainedLinearControlContinuousSystem

                                                Continuous-time affine control system with state constraints of the form:

                                                \[ x' = A x + B u + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                                                and $c$ a vector.

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                • D – matrix
                                                • X – state constraints
                                                • U – input constraints
                                                • W – disturbance set
                                                source
                                                NoisyConstrainedAffineControlContinuousSystem

                                                Continuous-time affine control system with state constraints of the form:

                                                \[ x' = A x + B u + c + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                                                and $c$ a vector.

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                • c – vector
                                                • D – matrix
                                                • X – state constraints
                                                • U – input constraints
                                                • W – disturbance set
                                                source
                                                NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                                Continuous-time control system defined by a right-hand side with state constraints of the form:

                                                \[ x' = f(x(t), u(t), w(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W}.\]

                                                Fields

                                                • f – function that holds the right-hand side
                                                • statedim – number of state variables
                                                • inputdim – number of input variables
                                                • X – state constraints
                                                • U – input constraints
                                                • W – disturbance set
                                                source

                                                Discrete Systems

                                                DiscreteIdentitySystem <: AbstractDiscreteSystem

                                                Trivial identity discrete-time system of the form:

                                                \[ x_{k+1} = x_k.\]

                                                Fields

                                                • statedim – number of state variables
                                                source
                                                ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                                Trivial identity discrete-time system with state constraints of the form:

                                                \[ x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]

                                                Fields

                                                • statedim – number of state variables
                                                • X – state constraints
                                                source
                                                LinearDiscreteSystem

                                                Discrete-time linear system of the form:

                                                \[ x_{k+1} = A x_k.\]

                                                Fields

                                                • A – square matrix
                                                source
                                                AffineDiscreteSystem

                                                Discrete-time affine system of the form:

                                                \[ x_{k+1} = A x_k + b.\]

                                                Fields

                                                • A – square matrix
                                                • b – vector
                                                source
                                                LinearControlDiscreteSystem

                                                Discrete-time linear control system of the form:

                                                \[ x_{k+1} = A x_k + B u_k.\]

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                source
                                                ConstrainedLinearDiscreteSystem

                                                Discrete-time linear system with state constraints of the form:

                                                \[ x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                                Fields

                                                • A – square matrix
                                                • X – state constraints
                                                source
                                                ConstrainedAffineDiscreteSystem

                                                Discrete-time affine system with state constraints of the form:

                                                \[ x_{k+1} = A x_k + b, x_k ∈ \mathcal{X} \text{ for all } k.\]

                                                Fields

                                                • A – square matrix
                                                • b – vector
                                                • X – state constraints
                                                source
                                                ConstrainedLinearControlDiscreteSystem

                                                Discrete-time linear control system with state constraints of the form:

                                                \[ x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                • X – state constraints
                                                • U – input constraints
                                                source
                                                ConstrainedAffineControlDiscreteSystem

                                                Continuous-time affine control system with state constraints of the form:

                                                \[ x_{k+1} = A x_k + B u_k + c, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k,\]

                                                and $c$ a vector.

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                • c – vector
                                                • X – state constraints
                                                • U – input constraints
                                                source
                                                LinearAlgebraicDiscreteSystem

                                                Discrete-time linear algebraic system of the form:

                                                \[ E x_{k+1} = A x_k.\]

                                                Fields

                                                • A – matrix
                                                • E – matrix, same size as A
                                                source
                                                ConstrainedLinearAlgebraicDiscreteSystem

                                                Discrete-time linear system with state constraints of the form:

                                                \[ E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                                Fields

                                                • A – matrix
                                                • E – matrix, same size as A
                                                • X – state constraints
                                                source
                                                PolynomialDiscreteSystem

                                                Discrete-time polynomial system of the form:

                                                \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                                Fields

                                                • p – polynomial vector field
                                                • statedim – number of state variables
                                                source
                                                ConstrainedPolynomialDiscreteSystem

                                                Discrete-time polynomial system with state constraints:

                                                \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                                Fields

                                                • p – polynomial
                                                • X – constraint set
                                                • statedim – number of state variables
                                                source
                                                BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                                Discrete-time system defined by a right-hand side of the form:

                                                \[ x_{k+1} = f(x_k)\]

                                                Fields

                                                • f – function that holds the right-hand side
                                                • statedim – number of state variables
                                                source
                                                ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                                Discrete-time system defined by a right-hand side with state constraints of the form:

                                                \[ x_{k+1} = f(x_k), x_k ∈ \mathcal{X}.\]

                                                Fields

                                                • f – function that holds the right-hand side
                                                • statedim – number of state variables
                                                • X – state constraints
                                                source
                                                ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                                Discrete-time control system defined by a right-hand side with state and input constraints of the form:

                                                \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}.\]

                                                Fields

                                                • f – function that holds the right-hand side
                                                • statedim – number of state variables
                                                • inputdim – number of input variables
                                                • X – state constraints
                                                • U – input constraints
                                                source
                                                NoisyConstrainedLinearDiscreteSystem

                                                Discrete-time linear system with additive disturbance and state constraints of the form:

                                                \[ x_{k+1} = A x_k + D w_k, x_k ∈ \mathcal{X}, w(t) ∈ \mathcal{W} .\]

                                                Fields

                                                • A – square matrix
                                                • D – matrix
                                                • X – state constraints
                                                • W – disturbance set
                                                source
                                                NoisyConstrainedLinearControlDiscreteSystem

                                                Continuous-time affine control system with state constraints of the form:

                                                \[ x_{k+1} = A x_k + B u_k + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                                                and $c$ a vector.

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                • D – matrix
                                                • X – state constraints
                                                • U – input constraints
                                                • W – disturbance set
                                                source
                                                NoisyConstrainedAffineControlDiscreteSystem

                                                Continuous-time affine control system with state constraints of the form:

                                                \[ x_{k+1} = A x_k + B u_k + c + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                                                and $c$ a vector.

                                                Fields

                                                • A – square matrix
                                                • B – matrix
                                                • c – vector
                                                • D – matrix
                                                • X – state constraints
                                                • U – input constraints
                                                • W – disturbance set
                                                source
                                                NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                                Discrete-time control system defined by a right-hand side with state constraints of the form:

                                                \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W}.\]

                                                Fields

                                                • f – function that holds the right-hand side
                                                • statedim – number of state variables
                                                • inputdim – number of input variables
                                                • X – state constraints
                                                • U – input constraints
                                                • W – disturbance set
                                                source

                                                Identity operator

                                                IdentityMultiple{T} < AbstractMatrix{T} where T

                                                A scalar multiple of the identity matrix of given order and numeric type.

                                                Fields

                                                • M – uniform scaling operator of type T
                                                • n – size of the identity matrix

                                                Notes

                                                This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                                                Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                                                The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                                                Examples

                                                The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                                                julia> using MathematicalSystems: IdentityMultiple
                                                +
                                                +julia> I2 = I(2)
                                                +IdentityMultiple{Float64} of value 1.0 and order 2
                                                +
                                                +julia> I2 + I2
                                                +IdentityMultiple{Float64} of value 2.0 and order 2
                                                +
                                                +julia> 4*I2
                                                +IdentityMultiple{Float64} of value 4.0 and order 2

                                                The numeric type (default Float64) can be passed as a second argument:

                                                julia> I2r = I(2, Rational{Int})
                                                +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                                                +
                                                +julia> I2r + I2r
                                                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                                +
                                                +julia> 4*I2r
                                                +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                                                To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in

                                                julia> I2 = I(2.0, 2)
                                                +IdentityMultiple{Float64} of value 2.0 and order 2
                                                +
                                                +julia> I2r = I(2//1, 2)
                                                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                                                Or use the lower level constructor passing the UniformScaling (I):

                                                julia> I2 = IdentityMultiple(2.0*I, 2)
                                                +IdentityMultiple{Float64} of value 2.0 and order 2
                                                +
                                                +julia> I2r = IdentityMultiple(2//1*I, 2)
                                                +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                                source

                                                Initial Value Problems

                                                InitialValueProblem

                                                Parametric composite type for initial value problems. It is parameterized in the system's type.

                                                Fields

                                                • s – system
                                                • x0 – initial state

                                                Examples

                                                The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

                                                julia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);
                                                +
                                                +julia> p.x0
                                                +2-element Array{Float64,1}:
                                                + -0.5
                                                +  0.5
                                                +
                                                +julia> statedim(p)
                                                +2
                                                +
                                                +julia> inputdim(p)
                                                +0
                                                source
                                                IVP

                                                IVP is an alias for InitialValueProblem.

                                                source

                                                Input Types

                                                AbstractInput

                                                Abstract supertype for all input types.

                                                Notes

                                                The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                                Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                                A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                                source
                                                ConstantInput{UT} <: AbstractInput

                                                Type representing an input that remains constant in time.

                                                Fields

                                                • U – input set

                                                Examples

                                                The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                                julia> c = ConstantInput(-1//2)
                                                +ConstantInput{Rational{Int64}}(-1//2)
                                                +
                                                +julia> iterate(c, 1)
                                                +(-1//2, nothing)
                                                +
                                                +julia> iterate(c, 2)
                                                +(-1//2, nothing)
                                                +
                                                +julia> collect(nextinput(c, 4))
                                                +4-element Array{Rational{Int64},1}:
                                                + -1//2
                                                + -1//2
                                                + -1//2
                                                + -1//2

                                                The elements of this input are rational numbers:

                                                julia> eltype(c)
                                                +Rational{Int64}

                                                To transform a constant input, you can use map as in:

                                                julia> map(x->2*x, c)
                                                +ConstantInput{Rational{Int64}}(-1//1)
                                                source
                                                VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                                                Type representing an input that may vary with time.

                                                Fields

                                                • U – vector of input sets

                                                Examples

                                                The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                                julia> v = VaryingInput([-1//2, 1//2])
                                                +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                                                +
                                                +julia> length(v)
                                                +2
                                                +
                                                +julia> eltype(v)
                                                +Rational{Int64}

                                                Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                                julia> iterate(v, 1)
                                                +(-1//2, 2)
                                                +
                                                +julia> iterate(v, 2)
                                                +(1//2, 3)

                                                The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                                julia> typeof(nextinput(v))
                                                +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                                                +
                                                +julia> collect(nextinput(v, 1))
                                                +1-element Array{Rational{Int64},1}:
                                                + -1//2
                                                +
                                                +julia> collect(nextinput(v, 2))
                                                +2-element Array{Rational{Int64},1}:
                                                + -1//2
                                                +  1//2

                                                You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                                julia> collect(v)
                                                +2-element Array{Rational{Int64},1}:
                                                + -1//2
                                                +  1//2
                                                +
                                                +julia> [2*vi for vi in v]
                                                +2-element Array{Rational{Int64},1}:
                                                + -1//1
                                                +  1//1

                                                Since this input type is finite, querying more elements than its length returns the full vector:

                                                julia> collect(nextinput(v, 4))
                                                +2-element Array{Rational{Int64},1}:
                                                + -1//2
                                                +  1//2

                                                To transform a varying input, you can use map as in:

                                                julia> map(x->2*x, v)
                                                +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                                                source

                                                Maps

                                                AbstractMap

                                                Abstract supertype for all map types.

                                                source
                                                IdentityMap

                                                An identity map,

                                                \[ x ↦ x.\]

                                                Fields

                                                • dim – dimension
                                                source
                                                ConstrainedIdentityMap

                                                An identity map with state constraints of the form:

                                                \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                                                Fields

                                                • dim – dimension
                                                • X – state constraints
                                                source
                                                LinearMap

                                                A linear map,

                                                \[ x ↦ Ax\]

                                                Fields

                                                • A – matrix
                                                source
                                                ConstrainedLinearMap

                                                A linear map with state constraints of the form:

                                                \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                                                Fields

                                                • A – matrix
                                                • X – state constraints
                                                source
                                                AffineMap

                                                An affine map,

                                                \[ x ↦ Ax + b.\]

                                                Fields

                                                • A – matrix
                                                • b – vector
                                                source
                                                ConstrainedAffineMap

                                                An affine map with state constraints of the form:

                                                \[ x ↦ Ax + b, x(t) ∈ \mathcal{X}.\]

                                                Fields

                                                • A – matrix
                                                • b – vector
                                                • X – state constraints
                                                source
                                                LinearControlMap

                                                A linear control map,

                                                \[ (x, u) ↦ Ax + Bu.\]

                                                Fields

                                                • A – matrix
                                                • B – matrix
                                                source
                                                ConstrainedLinearControlMap

                                                A linear control map with state and input constraints,

                                                \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                                Fields

                                                • A – matrix
                                                • B – matrix
                                                • X – state constraints
                                                • U – input constraints
                                                source
                                                AffineControlMap

                                                An affine control map,

                                                \[ (x, u) ↦ Ax + Bu + c.\]

                                                Fields

                                                • A – matrix
                                                • B – matrix
                                                • c – vector
                                                source
                                                ConstrainedAffineControlMap

                                                An affine control map with state and input constraints,

                                                \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                                Fields

                                                • A – matrix
                                                • B – matrix
                                                • c – vector
                                                • X – state constraints
                                                • U – input constraints
                                                source
                                                ResetMap

                                                A reset map,

                                                \[ x ↦ R(x),\]

                                                such that a subset of the variables is given a specified value, and the rest are unchanged.

                                                Fields

                                                • dim – dimension
                                                • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                                source
                                                ConstrainedResetMap

                                                A reset map with state constraints of the form:

                                                \[ x ↦ R(x), x ∈ \mathcal{X},\]

                                                such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                                                Fields

                                                • dim – dimension
                                                • X – state constraints
                                                • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                                source

                                                Macros

                                                map(ex, args)

                                                Returns an instance of the map type corresponding to the given expression.

                                                Input

                                                • ex – an expression defining the map, in the form of an anonymous function
                                                • args – additional optional arguments

                                                Output

                                                A map that best matches the given expression.

                                                Examples

                                                Let us first create a linear map using this macro:

                                                julia> @map x -> [1 0; 0 0]*x
                                                +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                                                We can create an affine system as well:

                                                julia> @map x -> [1 0; 0 0]*x + [2, 0]
                                                +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                                                Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:

                                                julia> @map(x -> x, dim=5)
                                                +IdentityMap(5)

                                                An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                                                julia> @map x -> I(5)*x
                                                +IdentityMap(5)
                                                source

                                                Systems with output

                                                SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                                                Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                                Fields

                                                • s – system of type ST
                                                • outputmap – output map of type MT
                                                source
                                                LinearTimeInvariantSystem(A, B, C, D)

                                                A linear time-invariant system with of the form

                                                \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                                                Input

                                                • A – matrix
                                                • B – matrix
                                                • C – matrix
                                                • D – matrix

                                                Output

                                                A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                                source
                                                LinearTimeInvariantSystem(A, B, C, D, X, U)

                                                A linear time-invariant system with state and input constraints of the form

                                                \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                                                where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                                Input

                                                • A – matrix
                                                • B – matrix
                                                • C – matrix
                                                • D – matrix
                                                • X – state constraints
                                                • U – input constraints

                                                Output

                                                A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                                source
                                                LTISystem

                                                LTISystem is an alias for LinearTimeInvariantSystem.

                                                source
                                                diff --git a/v0.8.1/search/index.html b/v0.8.1/search/index.html new file mode 100644 index 00000000..9cf191e7 --- /dev/null +++ b/v0.8.1/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                                Search

                                                Search

                                                Number of results: loading...

                                                  diff --git a/v0.8.1/search_index.js b/v0.8.1/search_index.js new file mode 100644 index 00000000..e03b2e7f --- /dev/null +++ b/v0.8.1/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x = 0\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form:\n\n x = 0 x(t) mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x = A x\n\nFields\n\nA – square matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x = A x + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n x = A x x(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form:\n\n x = A x + b x(t) mathcalX\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form:\n\n x = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n E x = A x x(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x = p(x)\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints:\n\n x = p(x) x(t) mathcalX\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x = f(x(t))\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t)) x(t) mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state and input constraints of the form:\n\n x = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and state constraints of the form:\n\n x = A x + D w x(t) mathcalX w(t) mathcalW\n\nFields\n\nA – square matrix\nD – matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t) u(t) w(t)) x(t) mathcalX u(t) mathcalU w(t) mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form:\n\n x_k+1 = x_k x_k mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + b\n\nFields\n\nA – square matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with state constraints of the form:\n\n x_k+1 = A x_k + b x_k mathcalX text for all k\n\nFields\n\nA – square matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c x_k mathcalX u_k mathcalU text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n E x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k)\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state and input constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and state constraints of the form:\n\n x_k+1 = A x_k + D w_k x_k mathcalX w(t) mathcalW \n\nFields\n\nA – square matrix\nD – matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU w_k mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the lower level constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system's type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + b\n\nFields\n\nA – matrix\nb – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + b x(t) mathcalX\n\nFields\n\nA – matrix\nb – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturns an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For exmple, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe criterion refers to the type information, not the value. Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"}] +} diff --git a/v0.8.1/siteinfo.js b/v0.8.1/siteinfo.js new file mode 100644 index 00000000..a6be1ae1 --- /dev/null +++ b/v0.8.1/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.8.1"; diff --git a/v0.9 b/v0.9 new file mode 120000 index 00000000..7965b36d --- /dev/null +++ b/v0.9 @@ -0,0 +1 @@ +v0.9.0 \ No newline at end of file diff --git a/v0.9.0/about/index.html b/v0.9.0/about/index.html new file mode 100644 index 00000000..42b1260a --- /dev/null +++ b/v0.9.0/about/index.html @@ -0,0 +1,2 @@ + +About · MathematicalSystems.jl

                                                  About

                                                  About

                                                  This page contains some general information about this project, and recommendations about contributing.

                                                  Contributing

                                                  If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.

                                                  Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.

                                                  Branches and pull requests (PR)

                                                  We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.

                                                  Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.

                                                  Unit testing and continuous integration (CI)

                                                  This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.

                                                  When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:

                                                  $ julia --color=yes test/runtests.jl

                                                  Alternatively, you can achieve the same from inside the REPL using the following command:

                                                  julia> Pkg.test("MathematicalSystems")

                                                  We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.

                                                  Contributing to the documentation

                                                  New functions and types should be documented according to our guidelines directly in the source code.

                                                  You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:

                                                  julia> ?LinearContinuousSystem

                                                  This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).

                                                  To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:

                                                  $ julia --color=yes docs/make.jl

                                                  Note that this also runs all doctests which will take some time.

                                                  Related projects

                                                  This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.

                                                  Below we list more related projects.

                                                  Package nameDescription
                                                  HybridSystems.jlHybrid Systems definitions in Julia.
                                                  LTISystems.jlJulia package for representing linear time-invariant system models and operations defined on them.
                                                  ControlToolbox.jlAnalysis and design tools for control systems.
                                                  ronisbr/ControlToolbox.jlA Control Toolbox for Julia language.
                                                  DynamicalSystemsBase.jlDefinitions of core system and data types used in the ecosystem of DynamicalSystems.jl.
                                                  ControlSystems.jlA Control Systems Toolbox for Julia
                                                  ModelingToolkit.jlA toolkit for modeling and creating DSLs for Scientific Computing in Julia

                                                  Credits

                                                  These persons have contributed to MathematicalSystems.jl (in alphabetic order):

                                                  diff --git a/v0.9.0/assets/arrow.svg b/v0.9.0/assets/arrow.svg new file mode 100644 index 00000000..ee2798d3 --- /dev/null +++ b/v0.9.0/assets/arrow.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/v0.9.0/assets/documenter.css b/v0.9.0/assets/documenter.css new file mode 100644 index 00000000..d1f80496 --- /dev/null +++ b/v0.9.0/assets/documenter.css @@ -0,0 +1,605 @@ +/* + * The default CSS style for Documenter.jl generated sites + * + * Heavily inspired by the Julia Sphinx theme + * https://github.com/JuliaLang/JuliaDoc + * which extends the sphinx_rtd_theme + * https://github.com/snide/sphinx_rtd_theme + * + * Part of Documenter.jl + * https://github.com/JuliaDocs/Documenter.jl + * + * License: MIT + */ + +/* fonts */ +body, input { + font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #222; + text-rendering: optimizeLegibility; +} + +pre, code, kbd { + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.90em; +} + +pre code { + font-size: 1em; +} + +a { + color: #2980b9; + text-decoration: none; +} + +a:hover { + color: #3091d1; +} + +a:visited { + color: #9b59b6; +} + +body { + line-height: 1.5; +} + +h1 { + font-size: 1.75em; +} + +/* Unless the

                                                  the is very first thing on the page (i.e. the second element + * in the
                                                  , * after the
                                                  , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +img { + max-width: 100%; +} + +video { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + display: flex; + flex-flow: column nowrap; + overflow-y: auto; + padding: 1em 0 0 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + flex-shrink: 0; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc > ul { + min-height: 2em; + overflow-y: auto; + margin: 0; +} + +nav.toc > ul > li:last-child { + padding-bottom: 1em; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #909090; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +nav.toc ul::-webkit-scrollbar { + width: .4em; + background: none; +} + +nav.toc ul::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #c9c9c9; +} + +nav.toc ul::-webkit-scrollbar-thumb:hover { + border-radius: 5px; + background: #aaaaaa; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; + margin: 1em 0; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                                   surrounding the , while
                                                  + * highlight.js applies the .hljs style directly to the  tag.
                                                  + */
                                                  +.hljs {
                                                  +    background-color: transparent;
                                                  +    padding: 0;
                                                  +}
                                                  +
                                                  +@media only screen and (max-width: 768px) {
                                                  +    nav.toc {
                                                  +        position: fixed;
                                                  +        width: 16em;
                                                  +        left: -16em;
                                                  +        -webkit-overflow-scrolling: touch;
                                                  +        -webkit-transition-property: left; /* Safari */
                                                  +        -webkit-transition-duration: 0.3s; /* Safari */
                                                  +        transition-property: left;
                                                  +        transition-duration: 0.3s;
                                                  +        -webkit-transition-timing-function: ease-out; /* Safari */
                                                  +        transition-timing-function: ease-out;
                                                  +        z-index: 2;
                                                  +        box-shadow: 5px 0px 5px 0px rgb(210,210,210);
                                                  +    }
                                                  +
                                                  +    nav.toc.show {
                                                  +        left: 0;
                                                  +    }
                                                  +
                                                  +    article {
                                                  +        margin-left: 0;
                                                  +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                                  +        overflow-wrap: break-word;
                                                  +    }
                                                  +
                                                  +    article > header {
                                                  +        position: fixed;
                                                  +        left: 0;
                                                  +        z-index: 1;
                                                  +    }
                                                  +
                                                  +    article > header nav, hr {
                                                  +        display: none;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar {
                                                  +        display: block; /* is mobile */
                                                  +        position: fixed;
                                                  +        width: 100%;
                                                  +        height: 1.5em;
                                                  +        padding-top: 1em;
                                                  +        padding-bottom: 1em;
                                                  +        background-color: #fcfcfc;
                                                  +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                                  +        top: 0;
                                                  +        -webkit-transition-property: top; /* Safari */
                                                  +        -webkit-transition-duration: 0.3s; /* Safari */
                                                  +        transition-property: top;
                                                  +        transition-duration: 0.3s;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                                  +        top: -4em;
                                                  +        -webkit-transition-property: top; /* Safari */
                                                  +        -webkit-transition-duration: 0.7s; /* Safari */
                                                  +        transition-property: top;
                                                  +        transition-duration: 0.7s;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar span {
                                                  +        width: 80%;
                                                  +        height: 1.5em;
                                                  +        margin-top: -0.1em;
                                                  +        margin-left: 0.9em;
                                                  +        font-size: 1.2em;
                                                  +        overflow: hidden;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar a.fa-bars {
                                                  +        float: right;
                                                  +        padding: 0.6em;
                                                  +        margin-top: -0.6em;
                                                  +        margin-right: 0.3em;
                                                  +        font-size: 1.5em;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar a.fa-bars:visited {
                                                  +        color: #3091d1;
                                                  +    }
                                                  +
                                                  +    article table {
                                                  +        overflow-x: auto;
                                                  +        display: block;
                                                  +    }
                                                  +
                                                  +    article div.MathJax_Display {
                                                  +        overflow: scroll;
                                                  +    }
                                                  +
                                                  +    article span.MathJax {
                                                  +        overflow: hidden;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media only screen and (max-width: 320px) {
                                                  +    body {
                                                  +        font-size: 15px;
                                                  +    }
                                                  +}
                                                  diff --git a/v0.9.0/assets/documenter.js b/v0.9.0/assets/documenter.js
                                                  new file mode 100644
                                                  index 00000000..761ae294
                                                  --- /dev/null
                                                  +++ b/v0.9.0/assets/documenter.js
                                                  @@ -0,0 +1,132 @@
                                                  +/*
                                                  + * Part of Documenter.jl
                                                  + *     https://github.com/JuliaDocs/Documenter.jl
                                                  + *
                                                  + * License: MIT
                                                  + */
                                                  +
                                                  +requirejs.config({
                                                  +    paths: {
                                                  +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                                  +        'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
                                                  +        'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
                                                  +        'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
                                                  +        'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
                                                  +        'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
                                                  +        'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
                                                  +    },
                                                  +    shim: {
                                                  +        'mathjax' : {
                                                  +            exports: "MathJax"
                                                  +        },
                                                  +        'highlight-julia': ['highlight'],
                                                  +        'highlight-julia-repl': ['highlight'],
                                                  +    }
                                                  +});
                                                  +
                                                  +// Load MathJax
                                                  +require(['mathjax'], function(MathJax) {
                                                  +    MathJax.Hub.Config({
                                                  +      "tex2jax": {
                                                  +        inlineMath: [['$','$'], ['\\(','\\)']],
                                                  +        processEscapes: true
                                                  +      }
                                                  +    });
                                                  +    MathJax.Hub.Config({
                                                  +      config: ["MMLorHTML.js"],
                                                  +      jax: [
                                                  +        "input/TeX",
                                                  +        "output/HTML-CSS",
                                                  +        "output/NativeMML"
                                                  +      ],
                                                  +      extensions: [
                                                  +        "MathMenu.js",
                                                  +        "MathZoom.js",
                                                  +        "TeX/AMSmath.js",
                                                  +        "TeX/AMSsymbols.js",
                                                  +        "TeX/autobold.js",
                                                  +        "TeX/autoload-all.js"
                                                  +      ]
                                                  +    });
                                                  +    MathJax.Hub.Config({
                                                  +      TeX: { equationNumbers: { autoNumber: "AMS" } }
                                                  +    });
                                                  +})
                                                  +
                                                  +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
                                                  +    $(document).ready(function() {
                                                  +        hljs.initHighlighting();
                                                  +    })
                                                  +
                                                  +})
                                                  +
                                                  +// update the version selector with info from the siteinfo.js and ../versions.js files
                                                  +require(['jquery'], function($) {
                                                  +    $(document).ready(function() {
                                                  +        var version_selector = $("#version-selector");
                                                  +
                                                  +        // add the current version to the selector based on siteinfo.js, but only if the selector is empty
                                                  +        if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
                                                  +            var option = $("");
                                                  +            version_selector.append(option);
                                                  +        }
                                                  +
                                                  +        if (typeof DOC_VERSIONS !== 'undefined') {
                                                  +            var existing_versions = $('#version-selector > option');
                                                  +            var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
                                                  +            DOC_VERSIONS.forEach(function(each) {
                                                  +                var version_url = documenterBaseURL + "/../" + each;
                                                  +                var existing_id = $.inArray(each, existing_versions_texts);
                                                  +                // if not already in the version selector, add it as a new option,
                                                  +                // otherwise update the old option with the URL and enable it
                                                  +                if (existing_id == -1) {
                                                  +                    var option = $("");
                                                  +                    version_selector.append(option);
                                                  +                } else {
                                                  +                    var option = existing_versions[existing_id];
                                                  +                    option.value = version_url;
                                                  +                    option.disabled = false;
                                                  +                }
                                                  +            });
                                                  +        }
                                                  +
                                                  +        // only show the version selector if the selector has been populated
                                                  +        if ($('#version-selector > option').length > 0) {
                                                  +            version_selector.css("visibility", "visible");
                                                  +        }
                                                  +
                                                  +        // Scroll the navigation bar to the currently selected menu item
                                                  +        $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
                                                  +    })
                                                  +
                                                  +})
                                                  +
                                                  +// mobile
                                                  +require(['jquery', 'headroom'], function($, Headroom) {
                                                  +    $(document).ready(function() {
                                                  +        var navtoc = $("nav.toc");
                                                  +        $("nav.toc li.current a.toctext").click(function() {
                                                  +            navtoc.toggleClass('show');
                                                  +        });
                                                  +        $("article > header div#topbar a.fa-bars").click(function(ev) {
                                                  +            ev.preventDefault();
                                                  +            navtoc.toggleClass('show');
                                                  +            if (navtoc.hasClass('show')) {
                                                  +                var title = $("article > header div#topbar span").text();
                                                  +                $("nav.toc ul li a:contains('" + title + "')").focus();
                                                  +            }
                                                  +        });
                                                  +        $("article#docs").bind('click', function(ev) {
                                                  +            if ($(ev.target).is('div#topbar a.fa-bars')) {
                                                  +                return;
                                                  +            }
                                                  +            if (navtoc.hasClass('show')) {
                                                  +                navtoc.removeClass('show');
                                                  +            }
                                                  +        });
                                                  +        if ($("article > header div#topbar").css('display') == 'block') {
                                                  +            var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
                                                  +            headroom.init();
                                                  +        }
                                                  +    })
                                                  +})
                                                  diff --git a/v0.9.0/assets/juliareach.css b/v0.9.0/assets/juliareach.css
                                                  new file mode 100644
                                                  index 00000000..64b0d92d
                                                  --- /dev/null
                                                  +++ b/v0.9.0/assets/juliareach.css
                                                  @@ -0,0 +1,583 @@
                                                  +/*
                                                  + * The default CSS style for Documenter.jl generated sites
                                                  + *
                                                  + * Heavily inspired by the Julia Sphinx theme
                                                  + *     https://github.com/JuliaLang/JuliaDoc
                                                  + * which extends the sphinx_rtd_theme
                                                  + *     https://github.com/snide/sphinx_rtd_theme
                                                  + *
                                                  + * Part of Documenter.jl
                                                  + *     https://github.com/JuliaDocs/Documenter.jl
                                                  + *
                                                  + * License: MIT
                                                  + */
                                                  +
                                                  +/* The original CSS is modified such that it right-justifies the text. */
                                                  +
                                                  +/* fonts */
                                                  +body, input {
                                                  +  font-family: 'Lato', 'Helvetica Neue', Arial, sans-serif;
                                                  +  font-size: 16px;
                                                  +  color: #222;
                                                  +  text-rendering: optimizeLegibility;
                                                  +}
                                                  +
                                                  +pre, code, kbd {
                                                  +  font-family: 'Roboto Mono', Monaco, courier, monospace;
                                                  +  font-size: 0.90em;
                                                  +}
                                                  +
                                                  +pre code {
                                                  +  font-size: 1em;
                                                  +}
                                                  +
                                                  +a {
                                                  +    color: #2980b9;
                                                  +    text-decoration: none;
                                                  +}
                                                  +
                                                  +a:hover {
                                                  +    color: #3091d1;
                                                  +}
                                                  +
                                                  +a:visited {
                                                  +    color: #9b59b6;
                                                  +}
                                                  +
                                                  +body {
                                                  +    line-height: 1.5;
                                                  +}
                                                  +
                                                  +h1 {
                                                  +    font-size: 1.75em;
                                                  +}
                                                  +
                                                  +/* Unless the 

                                                  the is very first thing on the page (i.e. the second element + * in the
                                                  , * after the
                                                  , we add some additional styling to it + * to make it stand out a bit more. This way we get a reasonable fallback if CSS3 + * selectors are not supported in the browser. + */ +article > h1:not(:nth-child(2)) { + margin: 2.5em 0 0; + padding-bottom: 0.30em; + border-bottom: 1px solid #e5e5e5; +} +h2 { + font-size: 1.50em; + margin: 2.3em 0 0; + padding-bottom: 0.25em; + border-bottom: 1px solid #e5e5e5; +} +h3 { + font-size: 1.25em; + margin: 2.0em 0 0; +} +h4 { font-size: 1.15em; } +h5 { font-size: 1.10em; } +h6 { font-size: 1em; } + +h4, h5, h6 { + margin-top: 1.5em; + margin-bottom: 1em; +} + +p { + text-align: justify +} + +img { + max-width: 100%; +} + +table { + border-collapse: collapse; + margin: 1em 0; +} + +th, td { + border: 1px solid #e1e4e5; + padding: 0.5em 1em; +} + +th { + border-bottom-width: 2px; +} + +tr:nth-child(even) { + background-color: #f3f6f6; +} + +hr { + border: 0; + border-top: 1px solid #e5e5e5; +} + +/* Inline code and code blocks */ + +code { + padding: 0.1em; + background-color: rgba(0,0,0,.04); + border-radius: 3px; +} + +pre { + background-color: #f5f5f5; + border: 1px solid #dddddd; + border-radius: 3px; + padding: 0.5em; + overflow: auto; +} + +pre code { + padding: 0; + background-color: initial; +} + +kbd { + font-size: 0.70em; + display: inline-block; + padding: 0.1em 0.5em 0.4em 0.5em; + line-height: 1.0em; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +/* Headers in admonitions and docstrings */ +.admonition h1, +article section.docstring h1 { + font-size: 1.25em; +} + +.admonition h2, +article section.docstring h2 { + font-size: 1.10em; +} + +.admonition h3, +.admonition h4, +.admonition h5, +.admonition h6, +article section.docstring h3, +article section.docstring h4, +article section.docstring h5, +article section.docstring h6 { + font-size: 1em; +} + +/* Navigation */ +nav.toc { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 20em; + overflow-y: auto; + padding: 1em 0; + background-color: #fcfcfc; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); +} + +nav.toc .logo { + margin: 0 auto; + display: block; + max-height: 6em; + max-width: 18em; +} + +nav.toc h1 { + text-align: center; + margin-top: .57em; + margin-bottom: 0; +} + +nav.toc select { + display: block; + height: 2em; + padding: 0 1.6em 0 1em; + min-width: 7em; + max-width: 90%; + max-width: calc(100% - 5em); + margin: 0 auto; + font-size: .83em; + border: 1px solid #c9c9c9; + border-radius: 1em; + + /* TODO: doesn't seem to be centered on Safari */ + text-align: center; + text-align-last: center; + + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + background: white url("arrow.svg"); + background-size: 1.155em; + background-repeat: no-repeat; + background-position: right; +} + +nav.toc select:hover { + border: 1px solid #a0a0a0; +} + +nav.toc select option { + text-align: center; +} + +nav.toc input { + display: block; + height: 2em; + width: 90%; + width: calc(100% - 5em); + margin: 1.2em auto; + padding: 0 1em; + border: 1px solid #c9c9c9; + border-radius: 1em; + font-size: .83em; +} + +nav.toc > ul * { + margin: 0; +} + +nav.toc ul { + color: #404040; + padding: 0; + list-style: none; +} + +nav.toc ul .toctext { + color: inherit; + display: block; +} + +nav.toc ul a:hover { + color: #fcfcfc; + background-color: #4e4a4a; +} + +nav.toc ul.internal a { + color: inherit; + display: block; +} + +nav.toc ul.internal a:hover { + background-color: #d6d6d6; +} + +nav.toc ul.internal { + background-color: #e3e3e3; + box-shadow: inset -14px 0px 5px -12px rgb(210,210,210); + list-style: none; +} + +nav.toc ul.internal li.toplevel { + border-top: 1px solid #c9c9c9; + font-weight: bold; +} + +nav.toc ul.internal li.toplevel:first-child { + border-top: none; +} + +nav.toc .toctext { + padding-top: 0.3em; + padding-bottom: 0.3em; + padding-right: 1em; +} + +nav.toc ul .toctext { + padding-left: 1em; +} + +nav.toc ul ul .toctext { + padding-left: 2em; +} + +nav.toc ul ul ul .toctext { + padding-left: 3em; +} + +nav.toc li.current > .toctext { + border-top: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + color: #404040; + font-weight: bold; + background-color: white; +} + +article { + margin-left: 20em; + min-width: 20em; + max-width: 48em; + padding: 2em; +} + +article > header {} + +article > header div#topbar { + display: none; +} + +article > header nav ul { + display: inline-block; + list-style: none; + margin: 0; + padding: 0; +} + +article > header nav li { + display: inline-block; + padding-right: 0.2em; +} + +article > header nav li:before { + content: "»"; + padding-right: 0.2em; +} + +article > header .edit-page { + float: right; +} + +article > footer {} + +article > footer a.prev { + float: left; +} +article > footer a.next { + float: right; +} + +article > footer a .direction:after { + content: ": "; +} + +article hr { + margin: 1em 0; +} + +article section.docstring { + border: 1px solid #ddd; + margin: 0.5em 0; + padding: 0.5em; + border-radius: 3px; +} + +article section.docstring .docstring-header { + margin-bottom: 1em; +} + +article section.docstring .docstring-binding { + color: #333; + font-weight: bold; +} + +article section.docstring .docstring-category { + font-style: italic; +} + +article section.docstring a.source-link { + display: block; + font-weight: bold; +} + +.nav-anchor, +.nav-anchor:hover, +.nav-anchor:visited { + color: #333; +} + +/* + * Admonitions + * + * Colors (title, body) + * warning: #f0b37e #ffedcc (orange) + * note: #6ab0de #e7f2fa (blue) + * tip: #1abc9c #dbfaf4 (green) +*/ +.admonition { + border-radius: 3px; + background-color: #eeeeee; +} + +.admonition-title { + border-radius: 3px 3px 0 0; + background-color: #9b9b9b; + padding: 0.15em 0.5em; +} + +.admonition-text { + padding: 0.5em; +} + +.admonition-text > :first-child { + margin-top: 0; +} + +.admonition-text > :last-child { + margin-bottom: 0; +} + +.admonition > .admonition-title:before { + font-family: "FontAwesome"; + margin-right: 5px; + content: "\f06a"; +} + +.admonition.warning > .admonition-title { + background-color: #f0b37e; +} + +.admonition.warning { + background-color: #ffedcc; +} + +.admonition.note > .admonition-title { + background-color: #6ab0de; +} + +.admonition.note { + background-color: #e7f2fa; +} + +.admonition.tip > .admonition-title { + background-color: #1abc9c; +} + +.admonition.tip { + background-color: #dbfaf4; +} + + +/* footnotes */ +.footnote { + padding-left: 0.8em; + border-left: 2px solid #ccc; +} + +/* Search page */ +#search-results .category { + font-size: smaller; +} + +#search-results .category:before { + content: " "; +} + +/* Overriding the block style of highligh.js. + * We have to override the padding and the background-color, since we style this + * part ourselves. Specifically, we style the
                                                   surrounding the , while
                                                  + * highlight.js applies the .hljs style directly to the  tag.
                                                  + */
                                                  +.hljs {
                                                  +    background-color: transparent;
                                                  +    padding: 0;
                                                  +}
                                                  +
                                                  +@media only screen and (max-width: 768px) {
                                                  +    nav.toc {
                                                  +        position: fixed;
                                                  +        overflow-y: scroll;
                                                  +        width: 16em;
                                                  +        left: -16em;
                                                  +        -webkit-overflow-scrolling: touch;
                                                  +        -webkit-transition-property: left; /* Safari */
                                                  +        -webkit-transition-duration: 0.3s; /* Safari */
                                                  +        transition-property: left;
                                                  +        transition-duration: 0.3s;
                                                  +        -webkit-transition-timing-function: ease-out; /* Safari */
                                                  +        transition-timing-function: ease-out;
                                                  +        z-index: 2;
                                                  +    }
                                                  +
                                                  +    nav.toc.show {
                                                  +        left: 0;
                                                  +    }
                                                  +
                                                  +    article {
                                                  +        margin-left: 0;
                                                  +        padding: 3em 0.9em 0 0.9em; /* top right bottom left */
                                                  +        overflow-wrap: break-word;
                                                  +    }
                                                  +
                                                  +    article > header {
                                                  +        position: fixed;
                                                  +        left: 0;
                                                  +        z-index: 1;
                                                  +    }
                                                  +
                                                  +    article > header nav, hr {
                                                  +        display: none;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar {
                                                  +        display: block; /* is mobile */
                                                  +        position: fixed;
                                                  +        width: 100%;
                                                  +        height: 1.5em;
                                                  +        padding-top: 1em;
                                                  +        padding-bottom: 1em;
                                                  +        background-color: #fcfcfc;
                                                  +        box-shadow: 0 1px 3px rgba(0,0,0,.26);
                                                  +        top: 0;
                                                  +        -webkit-transition-property: top; /* Safari */
                                                  +        -webkit-transition-duration: 0.3s; /* Safari */
                                                  +        transition-property: top;
                                                  +        transition-duration: 0.3s;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
                                                  +        top: -4em;
                                                  +        -webkit-transition-property: top; /* Safari */
                                                  +        -webkit-transition-duration: 0.7s; /* Safari */
                                                  +        transition-property: top;
                                                  +        transition-duration: 0.7s;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar span {
                                                  +        position: fixed;
                                                  +        width: 80%;
                                                  +        height: 1.5em;
                                                  +        margin-top: -0.1em;
                                                  +        margin-left: 0.9em;
                                                  +        font-size: 1.2em;
                                                  +        overflow: hidden;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar a.fa-bars {
                                                  +        float: right;
                                                  +        padding: 0.6em;
                                                  +        margin-top: -0.6em;
                                                  +        margin-right: 0.3em;
                                                  +        font-size: 1.5em;
                                                  +    }
                                                  +
                                                  +    article > header div#topbar a.fa-bars:visited {
                                                  +        color: #3091d1;
                                                  +    }
                                                  +
                                                  +    article table {
                                                  +        overflow-x: auto;
                                                  +        display: block;
                                                  +    }
                                                  +
                                                  +    article div.MathJax_Display {
                                                  +        overflow: scroll;
                                                  +    }
                                                  +
                                                  +    article span.MathJax {
                                                  +        overflow: hidden;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media only screen and (max-width: 320px) {
                                                  +    body {
                                                  +        font-size: 15px;
                                                  +    }
                                                  +}
                                                  diff --git a/v0.9.0/assets/search.js b/v0.9.0/assets/search.js
                                                  new file mode 100644
                                                  index 00000000..5d32c3aa
                                                  --- /dev/null
                                                  +++ b/v0.9.0/assets/search.js
                                                  @@ -0,0 +1,250 @@
                                                  +/*
                                                  + * Part of Documenter.jl
                                                  + *     https://github.com/JuliaDocs/Documenter.jl
                                                  + *
                                                  + * License: MIT
                                                  + */
                                                  +
                                                  +// parseUri 1.2.2
                                                  +// (c) Steven Levithan 
                                                  +// MIT License
                                                  +function parseUri (str) {
                                                  +	var	o   = parseUri.options,
                                                  +		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                                                  +		uri = {},
                                                  +		i   = 14;
                                                  +
                                                  +	while (i--) uri[o.key[i]] = m[i] || "";
                                                  +
                                                  +	uri[o.q.name] = {};
                                                  +	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
                                                  +		if ($1) uri[o.q.name][$1] = $2;
                                                  +	});
                                                  +
                                                  +	return uri;
                                                  +};
                                                  +parseUri.options = {
                                                  +	strictMode: false,
                                                  +	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
                                                  +	q:   {
                                                  +		name:   "queryKey",
                                                  +		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
                                                  +	},
                                                  +	parser: {
                                                  +		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
                                                  +		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
                                                  +	}
                                                  +};
                                                  +
                                                  +requirejs.config({
                                                  +    paths: {
                                                  +        'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
                                                  +        'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min',
                                                  +        'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min',
                                                  +    }
                                                  +});
                                                  +
                                                  +var currentScript = document.currentScript;
                                                  +
                                                  +require(["jquery", "lunr", "lodash"], function($, lunr, _) {
                                                  +    $("#search-form").submit(function(e) {
                                                  +        e.preventDefault()
                                                  +    })
                                                  +
                                                  +    // list below is the lunr 2.1.3 list minus the intersect with names(Base)
                                                  +    // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
                                                  +    // ideally we'd just filter the original list but it's not available as a variable
                                                  +    lunr.stopWordFilter = lunr.generateStopWordFilter([
                                                  +        'a',
                                                  +        'able',
                                                  +        'about',
                                                  +        'across',
                                                  +        'after',
                                                  +        'almost',
                                                  +        'also',
                                                  +        'am',
                                                  +        'among',
                                                  +        'an',
                                                  +        'and',
                                                  +        'are',
                                                  +        'as',
                                                  +        'at',
                                                  +        'be',
                                                  +        'because',
                                                  +        'been',
                                                  +        'but',
                                                  +        'by',
                                                  +        'can',
                                                  +        'cannot',
                                                  +        'could',
                                                  +        'dear',
                                                  +        'did',
                                                  +        'does',
                                                  +        'either',
                                                  +        'ever',
                                                  +        'every',
                                                  +        'from',
                                                  +        'got',
                                                  +        'had',
                                                  +        'has',
                                                  +        'have',
                                                  +        'he',
                                                  +        'her',
                                                  +        'hers',
                                                  +        'him',
                                                  +        'his',
                                                  +        'how',
                                                  +        'however',
                                                  +        'i',
                                                  +        'if',
                                                  +        'into',
                                                  +        'it',
                                                  +        'its',
                                                  +        'just',
                                                  +        'least',
                                                  +        'like',
                                                  +        'likely',
                                                  +        'may',
                                                  +        'me',
                                                  +        'might',
                                                  +        'most',
                                                  +        'must',
                                                  +        'my',
                                                  +        'neither',
                                                  +        'no',
                                                  +        'nor',
                                                  +        'not',
                                                  +        'of',
                                                  +        'off',
                                                  +        'often',
                                                  +        'on',
                                                  +        'only',
                                                  +        'or',
                                                  +        'other',
                                                  +        'our',
                                                  +        'own',
                                                  +        'rather',
                                                  +        'said',
                                                  +        'say',
                                                  +        'says',
                                                  +        'she',
                                                  +        'should',
                                                  +        'since',
                                                  +        'so',
                                                  +        'some',
                                                  +        'than',
                                                  +        'that',
                                                  +        'the',
                                                  +        'their',
                                                  +        'them',
                                                  +        'then',
                                                  +        'there',
                                                  +        'these',
                                                  +        'they',
                                                  +        'this',
                                                  +        'tis',
                                                  +        'to',
                                                  +        'too',
                                                  +        'twas',
                                                  +        'us',
                                                  +        'wants',
                                                  +        'was',
                                                  +        'we',
                                                  +        'were',
                                                  +        'what',
                                                  +        'when',
                                                  +        'who',
                                                  +        'whom',
                                                  +        'why',
                                                  +        'will',
                                                  +        'would',
                                                  +        'yet',
                                                  +        'you',
                                                  +        'your'
                                                  +        ])
                                                  +
                                                  +    // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
                                                  +    // would not find anything if searching for "add!", only for the entire qualification
                                                  +    lunr.tokenizer.separator = /[\s\-\.]+/
                                                  +
                                                  +    // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
                                                  +    lunr.trimmer = function (token) {
                                                  +        return token.update(function (s) {
                                                  +            return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
                                                  +        })
                                                  +    }
                                                  +
                                                  +    lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
                                                  +    lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
                                                  +
                                                  +    var index = lunr(function () {
                                                  +        this.ref('location')
                                                  +        this.field('title')
                                                  +        this.field('text')
                                                  +        documenterSearchIndex['docs'].forEach(function(e) {
                                                  +            this.add(e)
                                                  +        }, this)
                                                  +    })
                                                  +    var store = {}
                                                  +
                                                  +    documenterSearchIndex['docs'].forEach(function(e) {
                                                  +        store[e.location] = {title: e.title, category: e.category}
                                                  +    })
                                                  +
                                                  +    $(function(){
                                                  +        function update_search(querystring) {
                                                  +            tokens = lunr.tokenizer(querystring)
                                                  +            results = index.query(function (q) {
                                                  +                tokens.forEach(function (t) {
                                                  +                    q.term(t.toString(), {
                                                  +                        fields: ["title"],
                                                  +                        boost: 100,
                                                  +                        usePipeline: false,
                                                  +                        editDistance: 0,
                                                  +                        wildcard: lunr.Query.wildcard.NONE
                                                  +                    })
                                                  +                    q.term(t.toString(), {
                                                  +                        fields: ["title"],
                                                  +                        boost: 10,
                                                  +                        usePipeline: false,
                                                  +                        editDistance: 2,
                                                  +                        wildcard: lunr.Query.wildcard.NONE
                                                  +                    })
                                                  +                    q.term(t.toString(), {
                                                  +                        fields: ["text"],
                                                  +                        boost: 1,
                                                  +                        usePipeline: true,
                                                  +                        editDistance: 0,
                                                  +                        wildcard: lunr.Query.wildcard.NONE
                                                  +                    })
                                                  +                })
                                                  +            })
                                                  +            $('#search-info').text("Number of results: " + results.length)
                                                  +            $('#search-results').empty()
                                                  +            results.forEach(function(result) {
                                                  +                data = store[result.ref]
                                                  +                link = $('')
                                                  +                link.text(data.title)
                                                  +                link.attr('href', documenterBaseURL+'/'+result.ref)
                                                  +                cat = $('('+data.category+')')
                                                  +                li = $('
                                                • ').append(link).append(" ").append(cat) + $('#search-results').append(li) + }) + } + + function update_search_box() { + querystring = $('#search-query').val() + update_search(querystring) + } + + $('#search-query').keyup(_.debounce(update_search_box, 250)) + $('#search-query').change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + $("#search-query").val(search_query) + } + update_search_box(); + }) +}) diff --git a/v0.9.0/index.html b/v0.9.0/index.html new file mode 100644 index 00000000..f89a9953 --- /dev/null +++ b/v0.9.0/index.html @@ -0,0 +1,2 @@ + +Home · MathematicalSystems.jl

                                                  Home

                                                  MathematicalSystems.jl

                                                  MathematicalSystems is a Julia package for mathematical systems interfaces.

                                                  Features

                                                  • Generic and flexible systems definitions, while being fast and type stable.
                                                  • Types for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.
                                                  • Iterator interfaces to handle constant or time-varying inputs.

                                                  Library Outline

                                                  diff --git a/v0.9.0/lib/internals/index.html b/v0.9.0/lib/internals/index.html new file mode 100644 index 00000000..2ac6eee9 --- /dev/null +++ b/v0.9.0/lib/internals/index.html @@ -0,0 +1,42 @@ + +Internals · MathematicalSystems.jl

                                                  Internals

                                                  Internals

                                                  This section describes functions that are internal to the library.

                                                  Expression handling

                                                  _corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)

                                                  Return the system type whose field names match those in fields.

                                                  Input

                                                  • AT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem
                                                  • fields – tuple of field names

                                                  Output

                                                  The system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.

                                                  Examples

                                                  julia> using MathematicalSystems: _corresponding_type
                                                  +
                                                  +julia> _corresponding_type(AbstractContinuousSystem, ((:A),))
                                                  +LinearContinuousSystem
                                                  +
                                                  +julia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))
                                                  +ConstrainedLinearControlContinuousSystem
                                                  source
                                                  _capture_dim(expr)

                                                  Return the tuple containing the dimension(s) in expr.

                                                  Input

                                                  • expr – symbolic expression that can be of any of the following forms:

                                                    • :x or :(x) – state dimension
                                                    • :(x, u) – state and input dimension
                                                    • :(x, u, w) – state, input and noise dimensions

                                                  Output

                                                  • The scalar x if expr specifies the state dimension.
                                                  • The vector [x, u] if expr specifies state and input dimension.
                                                  • The vector [x, u, w] if expr specifies state, input and noise dimensions.
                                                  source
                                                  add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)

                                                  Checks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.

                                                  Input

                                                  • summand – expressions
                                                  • state – state variable
                                                  • input – input variable
                                                  • noise – noise variable, if available

                                                  Output

                                                  Multiplication expression or symbol.

                                                  Example

                                                  julia> using MathematicalSystems: add_asterisk
                                                  +
                                                  +julia> add_asterisk(:(A1*x), :x, :u, :w)
                                                  +:(A1 * x)
                                                  +
                                                  +julia> add_asterisk(:(c1), :x, :u, :w)
                                                  +:c1
                                                  +
                                                  +julia> add_asterisk(:(Ax1), :x1, :u, :w)
                                                  +:(A * x1)
                                                  +
                                                  +julia> add_asterisk(:(Awb), :x1, :u, :wb)
                                                  +:(A * wb)
                                                  +
                                                  +julia> add_asterisk(:(A1u), :x, :u, :w)
                                                  +:(A1 * u)
                                                  +
                                                  +julia> add_asterisk(:(A1ub), :x, :u, :w)
                                                  +:A1ub
                                                  source

                                                  Querying expressions

                                                  is_equation(expr)

                                                  Return true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.

                                                  Input

                                                  • expr – expression

                                                  Output

                                                  A Bool indicating whether expr is an equation or not.

                                                  source
                                                  extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)

                                                  Extract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.

                                                  Input

                                                  • summands – array of expressions
                                                  • state – state variable
                                                  • input – input variable
                                                  • noise – noise variable

                                                  Output

                                                  Array of tuples of symbols with variable name and field name.

                                                  Example

                                                  julia> using MathematicalSystems: extract_sum
                                                  +
                                                  +julia> extract_sum([:(A1*x)], :x, :u, :w)
                                                  +1-element Array{Tuple{Any,Symbol},1}:
                                                  + (:A1, :A)
                                                  +
                                                  +julia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)
                                                  +3-element Array{Tuple{Any,Symbol},1}:
                                                  + (:A1, :A)
                                                  + (:B1, :B)
                                                  + (:c, :c)
                                                  +
                                                  +julia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)
                                                  +3-element Array{Tuple{Any,Symbol},1}:
                                                  + (:A1, :A)
                                                  + (:B1, :B)
                                                  + (:B2, :D)

                                                  Notes

                                                  If an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.

                                                  If an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.

                                                  Similiarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.

                                                  source
                                                  diff --git a/v0.9.0/lib/methods/index.html b/v0.9.0/lib/methods/index.html new file mode 100644 index 00000000..113411be --- /dev/null +++ b/v0.9.0/lib/methods/index.html @@ -0,0 +1,13 @@ + +Methods · MathematicalSystems.jl

                                                  Methods

                                                  Methods

                                                  This section describes systems methods implemented in MathematicalSystems.jl.

                                                  States

                                                  statedim(s::AbstractSystem)

                                                  Returns the dimension of the state space of system s.

                                                  source
                                                  stateset(s::AbstractSystem)

                                                  Returns the set of allowed states of system s.

                                                  source

                                                  Inputs

                                                  inputdim(s::AbstractSystem)

                                                  Returns the dimension of the input space of system s.

                                                  source
                                                  inputset(s::AbstractSystem)

                                                  Returns the set of allowed inputs of system s.

                                                  source
                                                  nextinput(input::ConstantInput, n::Int=1)

                                                  Returns the first n elements of this input.

                                                  Input

                                                  • input – a constant input
                                                  • n – (optional, default: 1) the number of desired elements

                                                  Output

                                                  A repeated iterator that generates n equal samples of this input.

                                                  source
                                                  nextinput(input::VaryingInput, n::Int=1)

                                                  Returns the first n elements of this input.

                                                  Input

                                                  • input – varying input
                                                  • n – (optional, default: 1) number of desired elements

                                                  Output

                                                  An iterator of type Base.Iterators.Take that represents at most the first n elements of this input.

                                                  source

                                                  Output

                                                  outputdim(m::AbstractMap)

                                                  Returns the dimension of the output space of the map m.

                                                  source
                                                  outputmap(s::SystemWithOutput)

                                                  Returns the output map of a system with output.

                                                  source

                                                  Traits

                                                  islinear(s::AbstractSystem)

                                                  Specifies if the dynamics of system s is specified by linear equations.

                                                  Notes

                                                  We adopt the notion from [Section 2.7, 1]. For example, the system with inputs $x' = f(t, x, u) = A x + B u$ is linear, since the function $f(t, ⋅, ⋅)$ is linear in $(x, u)$ for each $t ∈ \mathbb{R}$. On the other hand, $x' = f(t, x, u) = A x + B u + c$ is affine but not linear, since it is not linear in $(x, u)$.

                                                  This function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.

                                                  [1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.

                                                  source
                                                  islinear(m::AbstractMap)

                                                  Specifies if the map m is linear or not.

                                                  Notes

                                                  A map is linear if it preserves the operations of scalar multiplication and vector addition.

                                                  source
                                                  isaffine(s::AbstractSystem)

                                                  Specifies if the dynamics of system s is specified by affine equations.

                                                  Notes

                                                  An affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.

                                                  This function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.

                                                  source
                                                  ispolynomial(s::AbstractSystem)

                                                  Specifies if the dynamics of system s is specified by polynomial equations.

                                                  The criterion refers to the type information, not the value. Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.

                                                  source
                                                  isaffine(m::AbstractMap)

                                                  Specifies if the map m is affine or not.

                                                  Notes

                                                  An affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).

                                                  source
                                                  isnoisy(s::AbstractSystem)

                                                  Determines if the dynamics of system s contains a noise term w.

                                                  source
                                                  iscontrolled(s::AbstractSystem)

                                                  Determines if the dynamics of system s contains a control input u.

                                                  source
                                                  isconstrained(s::AbstractSystem)

                                                  Determines if the system s has constraints on the state, input and noise, respectively (those that are available).

                                                  source

                                                  Maps

                                                  apply(m::AbstractMap, args...)

                                                  Apply the rule specified by the map to the given arguments.

                                                  source

                                                  Successor

                                                  successor(system::DiscreteIdentitySystem, x::AbstractVector)

                                                  Return the successor state of a DiscreteIdentitySystem.

                                                  Input

                                                  • systemDiscreteIdentitySystem
                                                  • x – state (it should be any vector type)

                                                  Output

                                                  The same state x.

                                                  source
                                                  successor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;
                                                  +          [check_constraints]=true)

                                                  Return the successor state of a ConstrainedDiscreteIdentitySystem.

                                                  Input

                                                  • systemConstrainedDiscreteIdentitySystem
                                                  • x – state (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                  Output

                                                  The same state x.

                                                  source
                                                  successor(system::LinearDiscreteSystem, x::AbstractVector)

                                                  Return the successor state of a LinearDiscreteSystem.

                                                  Input

                                                  • systemLinearDiscreteSystem
                                                  • x – state (it should be any vector type)

                                                  Output

                                                  The result of applying the system to x.

                                                  source
                                                  successor(system::AffineDiscreteSystem, x::AbstractVector)

                                                  Return the successor state of a AffineDiscreteSystem.

                                                  Input

                                                  • systemAffineDiscreteSystem
                                                  • x – state (it should be any vector type)

                                                  Output

                                                  The result of applying the system to x.

                                                  source
                                                  successor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)

                                                  Return the successor state of a LinearControlDiscreteSystem.

                                                  Input

                                                  • systemLinearControlDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • u – input (it should be any vector type)

                                                  Output

                                                  The result of applying the system to x, with input u.

                                                  source
                                                  successor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;
                                                  +          [check_constraints]=true)

                                                  Return the successor state of a ConstrainedLinearDiscreteSystem.

                                                  Input

                                                  • systemConstrainedLinearDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                  Output

                                                  The result of applying the system to x.

                                                  source
                                                  successor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;
                                                  +          [check_constraints])

                                                  Return the successor state of a ConstrainedAffineDiscreteSystem.

                                                  Input

                                                  • systemConstrainedAffineDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                  Output

                                                  The result of applying the system to x.

                                                  source
                                                  successor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,
                                                  +          u::AbstractVector; [check_constraints]=true)

                                                  Return the successor state of a ConstrainedLinearControlDiscreteSystem.

                                                  Input

                                                  • systemConstrainedLinearControlDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • u – input (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                                  Output

                                                  The result of applying the system to x, with input u.

                                                  source
                                                  successor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                                                  +          u::AbstractVector; [check_constraints]=true)

                                                  Return the successor state of a ConstrainedAffineControlDiscreteSystem.

                                                  Input

                                                  • systemConstrainedAffineControlDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • u – input (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                                  Output

                                                  The result of applying the system to x, with input u.

                                                  source
                                                  successor(system::BlackBoxDiscreteSystem, x::AbstractVector)

                                                  Return the successor state of a BlackBoxDiscreteSystem.

                                                  Input

                                                  • systemBlackBoxDiscreteSystem
                                                  • x – state (it should be any vector type)

                                                  Output

                                                  The result of applying the system to x.

                                                  source
                                                  successor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;
                                                  +          [check_constraints]=true)

                                                  Return the successor state of a ConstrainedBlackBoxDiscreteSystem.

                                                  Input

                                                  • systemConstrainedBlackBoxDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                  Output

                                                  The result of applying the system to x.

                                                  source
                                                  successor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                                                  +          u::AbstractVector; [check_constraints]=true)

                                                  Return the successor state of a ConstrainedBlackBoxControlDiscreteSystem.

                                                  Input

                                                  • systemConstrainedBlackBoxControlDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • u – input (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                  Output

                                                  The result of applying the system to x, with input u.

                                                  source
                                                  successor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,
                                                  +          w::AbstractVector; [check_constraints]=true)

                                                  Return the successor state of a NoisyConstrainedLinearDiscreteSystem.

                                                  Input

                                                  • systemNoisyConstrainedLinearDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • w – noise (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                  Output

                                                  The result of applying the system to x, with noise w.

                                                  source
                                                  successor(system::NoisyConstrainedLinearControlDiscreteSystem,
                                                  +          x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                                  Return the successor state of a NoisyConstrainedLinearControlDiscreteSystem.

                                                  Input

                                                  • systemNoisyConstrainedLinearControlDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • u – input (it should be any vector type)
                                                  • w – noise (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                                  Output

                                                  The result of applying the system to x, with input u and noise w.

                                                  source
                                                  successor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,
                                                  +          u::AbstractVector; [check_constraints]=true)

                                                  Return the successor state of a NoisyConstrainedAffineControlDiscreteSystem.

                                                  Input

                                                  • systemNoisyConstrainedAffineControlDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • u – input (it should be any vector type)
                                                  • w – noise (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)

                                                  Output

                                                  The result of applying the system to x, with input u and noise w.

                                                  source
                                                  successor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,
                                                  +          u::AbstractVector, w::AbstractVector; [check_constraints]=true)

                                                  Return the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.

                                                  Input

                                                  • systemNoisyConstrainedBlackBoxControlDiscreteSystem
                                                  • x – state (it should be any vector type)
                                                  • u – input (it should be any vector type)
                                                  • w – noise (it should be any vector type)
                                                  • check_constraints – (optional, default: true) check if the state belongs to the state set

                                                  Output

                                                  The result of applying the system to x, with input u and noise w.

                                                  source
                                                  diff --git a/v0.9.0/lib/types/index.html b/v0.9.0/lib/types/index.html new file mode 100644 index 00000000..53972676 --- /dev/null +++ b/v0.9.0/lib/types/index.html @@ -0,0 +1,110 @@ + +Types · MathematicalSystems.jl

                                                  Types

                                                  Types

                                                  This section describes systems types implemented in MathematicalSystems.jl.

                                                  Abstract Systems

                                                  AbstractSystem

                                                  Abstract supertype for all system types.

                                                  source
                                                  AbstractContinuousSystem

                                                  Abstract supertype for all continuous system types.

                                                  source
                                                  AbstractDiscreteSystem

                                                  Abstract supertype for all discrete system types.

                                                  source

                                                  Continuous Systems

                                                  ContinuousIdentitySystem <: AbstractContinuousSystem

                                                  Trivial identity continuous-time system of the form:

                                                  \[ x' = 0.\]

                                                  Fields

                                                  • statedim – number of state variables
                                                  source
                                                  ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem

                                                  Trivial identity continuous-time system with state constraints of the form:

                                                  \[ x' = 0, x(t) ∈ \mathcal{X}.\]

                                                  Fields

                                                  • statedim – number of state variables
                                                  • X – state constraints
                                                  source
                                                  LinearContinuousSystem

                                                  Continuous-time linear system of the form:

                                                  \[ x' = A x.\]

                                                  Fields

                                                  • A – square matrix
                                                  source
                                                  AffineContinuousSystem

                                                  Continuous-time affine system of the form:

                                                  \[ x' = A x + c.\]

                                                  Fields

                                                  • A – square matrix
                                                  • c – vector
                                                  source
                                                  LinearControlContinuousSystem

                                                  Continuous-time linear control system of the form:

                                                  \[ x' = A x + B u.\]

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  source
                                                  ConstrainedLinearContinuousSystem

                                                  Continuous-time linear system with state constraints of the form:

                                                  \[ x' = A x, x(t) ∈ \mathcal{X}.\]

                                                  Fields

                                                  • A – square matrix
                                                  • X – state constraints
                                                  source
                                                  ConstrainedAffineContinuousSystem

                                                  Continuous-time affine system with state constraints of the form:

                                                  \[ x' = A x + c, x(t) ∈ \mathcal{X}.\]

                                                  Fields

                                                  • A – square matrix
                                                  • c – vector
                                                  • X – state constraints
                                                  source
                                                  ConstrainedAffineControlContinuousSystem

                                                  Continuous-time affine control system with state constraints of the form:

                                                  \[ x' = A x + B u + c, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t,\]

                                                  and $c$ a vector.

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  • c – vector
                                                  • X – state constraints
                                                  • U – input constraints
                                                  source
                                                  ConstrainedLinearControlContinuousSystem

                                                  Continuous-time linear control system with state constraints of the form:

                                                  \[ x' = A x + B u, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U} \text{ for all } t.\]

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  • X – state constraints
                                                  • U – input constraints
                                                  source
                                                  LinearAlgebraicContinuousSystem

                                                  Continuous-time linear algebraic system of the form:

                                                  \[ E x' = A x.\]

                                                  Fields

                                                  • A – matrix
                                                  • E – matrix, same size as A
                                                  source
                                                  ConstrainedLinearAlgebraicContinuousSystem

                                                  Continuous-time linear system with state constraints of the form:

                                                  \[ E x' = A x, x(t) ∈ \mathcal{X}.\]

                                                  Fields

                                                  • A – matrix
                                                  • E – matrix, same size as A
                                                  • X – state constraints
                                                  source
                                                  PolynomialContinuousSystem

                                                  Continuous-time polynomial system of the form:

                                                  \[ x' = p(x).\]

                                                  Fields

                                                  • p – polynomial vector field
                                                  • statedim – number of state variables
                                                  source
                                                  ConstrainedPolynomialContinuousSystem

                                                  Continuous-time polynomial system with state constraints:

                                                  \[ x' = p(x), x(t) ∈ \mathcal{X}\]

                                                  Fields

                                                  • p – polynomial vector field
                                                  • X – constraint set
                                                  • statedim – number of state variables
                                                  source
                                                  BlackBoxContinuousSystem <: AbstractContinuousSystem

                                                  Continuous-time system defined by a right-hand side of the form:

                                                  \[ x' = f(x(t))\]

                                                  Fields

                                                  • f – function that holds the right-hand side
                                                  • statedim – number of state variables
                                                  source
                                                  ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem

                                                  Continuous-time system defined by a right-hand side with state constraints of the form:

                                                  \[ x' = f(x(t)), x(t) ∈ \mathcal{X}.\]

                                                  Fields

                                                  • f – function that holds the right-hand side
                                                  • statedim – number of state variables
                                                  • X – state constraints
                                                  source
                                                  ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                                  Continuous-time control system defined by a right-hand side with state and input constraints of the form:

                                                  \[ x' = f(x(t), u(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}.\]

                                                  Fields

                                                  • f – function that holds the right-hand side
                                                  • statedim – number of state variables
                                                  • inputdim – number of input variables
                                                  • X – state constraints
                                                  • U – input constraints
                                                  source
                                                  NoisyConstrainedLinearContinuousSystem

                                                  Continuous-time linear system with additive disturbance and state constraints of the form:

                                                  \[ x' = A x + D w, x(t) ∈ \mathcal{X}, w(t) ∈ \mathcal{W}.\]

                                                  Fields

                                                  • A – square matrix
                                                  • D – matrix
                                                  • X – state constraints
                                                  • W – disturbance set
                                                  source
                                                  NoisyConstrainedLinearControlContinuousSystem

                                                  Continuous-time affine control system with state constraints of the form:

                                                  \[ x' = A x + B u + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                                                  and $c$ a vector.

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  • D – matrix
                                                  • X – state constraints
                                                  • U – input constraints
                                                  • W – disturbance set
                                                  source
                                                  NoisyConstrainedAffineControlContinuousSystem

                                                  Continuous-time affine control system with state constraints of the form:

                                                  \[ x' = A x + B u + c + Dw, x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W} \text{ for all } t,\]

                                                  and $c$ a vector.

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  • c – vector
                                                  • D – matrix
                                                  • X – state constraints
                                                  • U – input constraints
                                                  • W – disturbance set
                                                  source
                                                  NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem

                                                  Continuous-time control system defined by a right-hand side with state constraints of the form:

                                                  \[ x' = f(x(t), u(t), w(t)), x(t) ∈ \mathcal{X}, u(t) ∈ \mathcal{U}, w(t) ∈ \mathcal{W}.\]

                                                  Fields

                                                  • f – function that holds the right-hand side
                                                  • statedim – number of state variables
                                                  • inputdim – number of input variables
                                                  • X – state constraints
                                                  • U – input constraints
                                                  • W – disturbance set
                                                  source

                                                  Discrete Systems

                                                  DiscreteIdentitySystem <: AbstractDiscreteSystem

                                                  Trivial identity discrete-time system of the form:

                                                  \[ x_{k+1} = x_k.\]

                                                  Fields

                                                  • statedim – number of state variables
                                                  source
                                                  ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem

                                                  Trivial identity discrete-time system with state constraints of the form:

                                                  \[ x_{k+1} = x_k, x_k ∈ \mathcal{X}.\]

                                                  Fields

                                                  • statedim – number of state variables
                                                  • X – state constraints
                                                  source
                                                  LinearDiscreteSystem

                                                  Discrete-time linear system of the form:

                                                  \[ x_{k+1} = A x_k.\]

                                                  Fields

                                                  • A – square matrix
                                                  source
                                                  AffineDiscreteSystem

                                                  Discrete-time affine system of the form:

                                                  \[ x_{k+1} = A x_k + c.\]

                                                  Fields

                                                  • A – square matrix
                                                  • c – vector
                                                  source
                                                  LinearControlDiscreteSystem

                                                  Discrete-time linear control system of the form:

                                                  \[ x_{k+1} = A x_k + B u_k.\]

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  source
                                                  ConstrainedLinearDiscreteSystem

                                                  Discrete-time linear system with state constraints of the form:

                                                  \[ x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                                  Fields

                                                  • A – square matrix
                                                  • X – state constraints
                                                  source
                                                  ConstrainedAffineDiscreteSystem

                                                  Discrete-time affine system with state constraints of the form:

                                                  \[ x_{k+1} = A x_k + c, x_k ∈ \mathcal{X} \text{ for all } k.\]

                                                  Fields

                                                  • A – square matrix
                                                  • c – vector
                                                  • X – state constraints
                                                  source
                                                  ConstrainedLinearControlDiscreteSystem

                                                  Discrete-time linear control system with state constraints of the form:

                                                  \[ x_{k+1} = A x_k + B u_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k.\]

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  • X – state constraints
                                                  • U – input constraints
                                                  source
                                                  ConstrainedAffineControlDiscreteSystem

                                                  Continuous-time affine control system with state constraints of the form:

                                                  \[ x_{k+1} = A x_k + B u_k + c, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U} \text{ for all } k,\]

                                                  and $c$ a vector.

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  • c – vector
                                                  • X – state constraints
                                                  • U – input constraints
                                                  source
                                                  LinearAlgebraicDiscreteSystem

                                                  Discrete-time linear algebraic system of the form:

                                                  \[ E x_{k+1} = A x_k.\]

                                                  Fields

                                                  • A – matrix
                                                  • E – matrix, same size as A
                                                  source
                                                  ConstrainedLinearAlgebraicDiscreteSystem

                                                  Discrete-time linear system with state constraints of the form:

                                                  \[ E x_{k+1} = A x_k, x_k ∈ \mathcal{X}.\]

                                                  Fields

                                                  • A – matrix
                                                  • E – matrix, same size as A
                                                  • X – state constraints
                                                  source
                                                  PolynomialDiscreteSystem

                                                  Discrete-time polynomial system of the form:

                                                  \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                                  Fields

                                                  • p – polynomial vector field
                                                  • statedim – number of state variables
                                                  source
                                                  ConstrainedPolynomialDiscreteSystem

                                                  Discrete-time polynomial system with state constraints:

                                                  \[ x_{k+1} = p(x_k), x_k ∈ \mathcal{X}.\]

                                                  Fields

                                                  • p – polynomial
                                                  • X – constraint set
                                                  • statedim – number of state variables
                                                  source
                                                  BlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                                  Discrete-time system defined by a right-hand side of the form:

                                                  \[ x_{k+1} = f(x_k)\]

                                                  Fields

                                                  • f – function that holds the right-hand side
                                                  • statedim – number of state variables
                                                  source
                                                  ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem

                                                  Discrete-time system defined by a right-hand side with state constraints of the form:

                                                  \[ x_{k+1} = f(x_k), x_k ∈ \mathcal{X}.\]

                                                  Fields

                                                  • f – function that holds the right-hand side
                                                  • statedim – number of state variables
                                                  • X – state constraints
                                                  source
                                                  ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                                  Discrete-time control system defined by a right-hand side with state and input constraints of the form:

                                                  \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}.\]

                                                  Fields

                                                  • f – function that holds the right-hand side
                                                  • statedim – number of state variables
                                                  • inputdim – number of input variables
                                                  • X – state constraints
                                                  • U – input constraints
                                                  source
                                                  NoisyConstrainedLinearDiscreteSystem

                                                  Discrete-time linear system with additive disturbance and state constraints of the form:

                                                  \[ x_{k+1} = A x_k + D w_k, x_k ∈ \mathcal{X}, w(t) ∈ \mathcal{W} .\]

                                                  Fields

                                                  • A – square matrix
                                                  • D – matrix
                                                  • X – state constraints
                                                  • W – disturbance set
                                                  source
                                                  NoisyConstrainedLinearControlDiscreteSystem

                                                  Continuous-time affine control system with state constraints of the form:

                                                  \[ x_{k+1} = A x_k + B u_k + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                                                  and $c$ a vector.

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  • D – matrix
                                                  • X – state constraints
                                                  • U – input constraints
                                                  • W – disturbance set
                                                  source
                                                  NoisyConstrainedAffineControlDiscreteSystem

                                                  Continuous-time affine control system with state constraints of the form:

                                                  \[ x_{k+1} = A x_k + B u_k + c + D w_k, x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W} \text{ for all } k,\]

                                                  and $c$ a vector.

                                                  Fields

                                                  • A – square matrix
                                                  • B – matrix
                                                  • c – vector
                                                  • D – matrix
                                                  • X – state constraints
                                                  • U – input constraints
                                                  • W – disturbance set
                                                  source
                                                  NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem

                                                  Discrete-time control system defined by a right-hand side with state constraints of the form:

                                                  \[ x_{k+1} = f(x_k, u_k), x_k ∈ \mathcal{X}, u_k ∈ \mathcal{U}, w_k ∈ \mathcal{W}.\]

                                                  Fields

                                                  • f – function that holds the right-hand side
                                                  • statedim – number of state variables
                                                  • inputdim – number of input variables
                                                  • X – state constraints
                                                  • U – input constraints
                                                  • W – disturbance set
                                                  source

                                                  System macro

                                                  system(expr...)

                                                  Return an instance of the system type corresponding to the given expressions.

                                                  Input

                                                  • expr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system

                                                  Output

                                                  A system that best matches the given expressions.

                                                  Notes

                                                  Terms. The expression expr contains one or more of the following sub-expressions:

                                                  • dynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax
                                                  • set constraints, e.g. x ∈ X
                                                  • input constraints, e.g. u ∈ U
                                                  • dimensionality, e.g. dim: (2,1) or dim = 1
                                                  • specification of the input variable, e.g. input: u or input = u
                                                  • specification of the noise variable, e,g, noise: w or noise = w

                                                  The macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:

                                                  @system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)

                                                  The different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.

                                                  Dynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using (which can be written with the combination of keys \^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.

                                                  Default values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.

                                                  Exceptions. The following exceptions and particular cases apply:

                                                  • If the right-hand side has the form A*x + B*foo or A*x + B*foo + c, the equation is parsed as a controlled linear (affine) system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.

                                                  • If the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.

                                                  • Systems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.

                                                  Examples

                                                  Let us first create a continuous linear system using this macro:

                                                  julia> A = [1. 0; 0 1.];
                                                  +
                                                  +julia> @system(x' = A*x)
                                                  +LinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                                                  A discrete system is defined by using :

                                                  julia> @system(x⁺ = A*x)
                                                  +LinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])

                                                  Additionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:

                                                  julia> using LazySets
                                                  +
                                                  +julia> B = Matrix([1. 0.5]');
                                                  +
                                                  +julia> c = [1., 1.5];
                                                  +
                                                  +julia> X = BallInf(zeros(2), 10.);
                                                  +
                                                  +julia> U = BallInf(zeros(1), 2.);
                                                  +
                                                  +julia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)
                                                  +ConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64},BallInf{Float64}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64}([0.0, 0.0], 10.0), BallInf{Float64}([0.0], 2.0))

                                                  For the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as

                                                  julia> f(x, u) = x + u;
                                                  +
                                                  +julia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))
                                                  +ConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64},BallInf{Float64}}(f, 2, 2, BallInf{Float64}([0.0, 0.0], 10.0), BallInf{Float64}([0.0], 2.0))
                                                  source

                                                  Identity operator

                                                  IdentityMultiple{T} < AbstractMatrix{T} where T

                                                  A scalar multiple of the identity matrix of given order and numeric type.

                                                  Fields

                                                  • M – uniform scaling operator of type T
                                                  • n – size of the identity matrix

                                                  Notes

                                                  This type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.

                                                  Internally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.

                                                  The difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.

                                                  Examples

                                                  The easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:

                                                  julia> using MathematicalSystems: IdentityMultiple
                                                  +
                                                  +julia> I2 = I(2)
                                                  +IdentityMultiple{Float64} of value 1.0 and order 2
                                                  +
                                                  +julia> I2 + I2
                                                  +IdentityMultiple{Float64} of value 2.0 and order 2
                                                  +
                                                  +julia> 4*I2
                                                  +IdentityMultiple{Float64} of value 4.0 and order 2

                                                  The numeric type (default Float64) can be passed as a second argument:

                                                  julia> I2r = I(2, Rational{Int})
                                                  +IdentityMultiple{Rational{Int64}} of value 1//1 and order 2
                                                  +
                                                  +julia> I2r + I2r
                                                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                                  +
                                                  +julia> 4*I2r
                                                  +IdentityMultiple{Rational{Int64}} of value 4//1 and order 2

                                                  To create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in

                                                  julia> I2 = I(2.0, 2)
                                                  +IdentityMultiple{Float64} of value 2.0 and order 2
                                                  +
                                                  +julia> I2r = I(2//1, 2)
                                                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2

                                                  Or use the lower level constructor passing the UniformScaling (I):

                                                  julia> I2 = IdentityMultiple(2.0*I, 2)
                                                  +IdentityMultiple{Float64} of value 2.0 and order 2
                                                  +
                                                  +julia> I2r = IdentityMultiple(2//1*I, 2)
                                                  +IdentityMultiple{Rational{Int64}} of value 2//1 and order 2
                                                  source

                                                  Initial Value Problems

                                                  InitialValueProblem

                                                  Parametric composite type for initial value problems. It is parameterized in the system's type.

                                                  Fields

                                                  • s – system
                                                  • x0 – initial state

                                                  Examples

                                                  The linear system $x' = -x$ with initial condition $x_0 = [-1/2, 1/2]$:

                                                  julia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);
                                                  +
                                                  +julia> p.x0
                                                  +2-element Array{Float64,1}:
                                                  + -0.5
                                                  +  0.5
                                                  +
                                                  +julia> statedim(p)
                                                  +2
                                                  +
                                                  +julia> inputdim(p)
                                                  +0
                                                  source
                                                  IVP

                                                  IVP is an alias for InitialValueProblem.

                                                  source

                                                  Input Types

                                                  AbstractInput

                                                  Abstract supertype for all input types.

                                                  Notes

                                                  The input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.

                                                  Iteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.

                                                  A convenience function nextinput(input, n) is also provided and it returns the first n elements of input.

                                                  source
                                                  ConstantInput{UT} <: AbstractInput

                                                  Type representing an input that remains constant in time.

                                                  Fields

                                                  • U – input set

                                                  Examples

                                                  The constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:

                                                  julia> c = ConstantInput(-1//2)
                                                  +ConstantInput{Rational{Int64}}(-1//2)
                                                  +
                                                  +julia> iterate(c, 1)
                                                  +(-1//2, nothing)
                                                  +
                                                  +julia> iterate(c, 2)
                                                  +(-1//2, nothing)
                                                  +
                                                  +julia> collect(nextinput(c, 4))
                                                  +4-element Array{Rational{Int64},1}:
                                                  + -1//2
                                                  + -1//2
                                                  + -1//2
                                                  + -1//2

                                                  The elements of this input are rational numbers:

                                                  julia> eltype(c)
                                                  +Rational{Int64}

                                                  To transform a constant input, you can use map as in:

                                                  julia> map(x->2*x, c)
                                                  +ConstantInput{Rational{Int64}}(-1//1)
                                                  source
                                                  VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput

                                                  Type representing an input that may vary with time.

                                                  Fields

                                                  • U – vector of input sets

                                                  Examples

                                                  The varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:

                                                  julia> v = VaryingInput([-1//2, 1//2])
                                                  +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])
                                                  +
                                                  +julia> length(v)
                                                  +2
                                                  +
                                                  +julia> eltype(v)
                                                  +Rational{Int64}

                                                  Base's iterate method receives the input and an integer state and returns the input element and the next iteration state:

                                                  julia> iterate(v, 1)
                                                  +(-1//2, 2)
                                                  +
                                                  +julia> iterate(v, 2)
                                                  +(1//2, 3)

                                                  The method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):

                                                  julia> typeof(nextinput(v))
                                                  +Base.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}
                                                  +
                                                  +julia> collect(nextinput(v, 1))
                                                  +1-element Array{Rational{Int64},1}:
                                                  + -1//2
                                                  +
                                                  +julia> collect(nextinput(v, 2))
                                                  +2-element Array{Rational{Int64},1}:
                                                  + -1//2
                                                  +  1//2

                                                  You can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):

                                                  julia> collect(v)
                                                  +2-element Array{Rational{Int64},1}:
                                                  + -1//2
                                                  +  1//2
                                                  +
                                                  +julia> [2*vi for vi in v]
                                                  +2-element Array{Rational{Int64},1}:
                                                  + -1//1
                                                  +  1//1

                                                  Since this input type is finite, querying more elements than its length returns the full vector:

                                                  julia> collect(nextinput(v, 4))
                                                  +2-element Array{Rational{Int64},1}:
                                                  + -1//2
                                                  +  1//2

                                                  To transform a varying input, you can use map as in:

                                                  julia> map(x->2*x, v)
                                                  +VaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])
                                                  source

                                                  Maps

                                                  AbstractMap

                                                  Abstract supertype for all map types.

                                                  source
                                                  IdentityMap

                                                  An identity map,

                                                  \[ x ↦ x.\]

                                                  Fields

                                                  • dim – dimension
                                                  source
                                                  ConstrainedIdentityMap

                                                  An identity map with state constraints of the form:

                                                  \[ x ↦ x, x(t) ∈ \mathcal{X}.\]

                                                  Fields

                                                  • dim – dimension
                                                  • X – state constraints
                                                  source
                                                  LinearMap

                                                  A linear map,

                                                  \[ x ↦ Ax\]

                                                  Fields

                                                  • A – matrix
                                                  source
                                                  ConstrainedLinearMap

                                                  A linear map with state constraints of the form:

                                                  \[ x ↦ Ax, x(t) ∈ \mathcal{X}.\]

                                                  Fields

                                                  • A – matrix
                                                  • X – state constraints
                                                  source
                                                  AffineMap

                                                  An affine map,

                                                  \[ x ↦ Ax + c.\]

                                                  Fields

                                                  • A – matrix
                                                  • c – vector
                                                  source
                                                  ConstrainedAffineMap

                                                  An affine map with state constraints of the form:

                                                  \[ x ↦ Ax + c, x(t) ∈ \mathcal{X}.\]

                                                  Fields

                                                  • A – matrix
                                                  • c – vector
                                                  • X – state constraints
                                                  source
                                                  LinearControlMap

                                                  A linear control map,

                                                  \[ (x, u) ↦ Ax + Bu.\]

                                                  Fields

                                                  • A – matrix
                                                  • B – matrix
                                                  source
                                                  ConstrainedLinearControlMap

                                                  A linear control map with state and input constraints,

                                                  \[ (x, u) ↦ Ax + Bu, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                                  Fields

                                                  • A – matrix
                                                  • B – matrix
                                                  • X – state constraints
                                                  • U – input constraints
                                                  source
                                                  AffineControlMap

                                                  An affine control map,

                                                  \[ (x, u) ↦ Ax + Bu + c.\]

                                                  Fields

                                                  • A – matrix
                                                  • B – matrix
                                                  • c – vector
                                                  source
                                                  ConstrainedAffineControlMap

                                                  An affine control map with state and input constraints,

                                                  \[ (x, u) ↦ Ax + Bu + c, x ∈ \mathcal{X}, u ∈ \mathcal{U}.\]

                                                  Fields

                                                  • A – matrix
                                                  • B – matrix
                                                  • c – vector
                                                  • X – state constraints
                                                  • U – input constraints
                                                  source
                                                  ResetMap

                                                  A reset map,

                                                  \[ x ↦ R(x),\]

                                                  such that a subset of the variables is given a specified value, and the rest are unchanged.

                                                  Fields

                                                  • dim – dimension
                                                  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                                  source
                                                  ConstrainedResetMap

                                                  A reset map with state constraints of the form:

                                                  \[ x ↦ R(x), x ∈ \mathcal{X},\]

                                                  such that the specified variables are assigned a given value, and the remaining variables are unchanged.

                                                  Fields

                                                  • dim – dimension
                                                  • X – state constraints
                                                  • dict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values
                                                  source

                                                  Macros

                                                  map(ex, args)

                                                  Return an instance of the map type corresponding to the given expression.

                                                  Input

                                                  • ex – an expression defining the map, in the form of an anonymous function
                                                  • args – additional optional arguments

                                                  Output

                                                  A map that best matches the given expression.

                                                  Examples

                                                  Let us first create a linear map using this macro:

                                                  julia> @map x -> [1 0; 0 0]*x
                                                  +LinearMap{Int64,Array{Int64,2}}([1 0; 0 0])

                                                  We can create an affine system as well:

                                                  julia> @map x -> [1 0; 0 0]*x + [2, 0]
                                                  +AffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])

                                                  Additional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:

                                                  julia> @map(x -> x, dim=5)
                                                  +IdentityMap(5)

                                                  An identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:

                                                  julia> @map x -> I(5)*x
                                                  +IdentityMap(5)
                                                  source

                                                  Systems with output

                                                  SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}

                                                  Parametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).

                                                  Fields

                                                  • s – system of type ST
                                                  • outputmap – output map of type MT
                                                  source
                                                  LinearTimeInvariantSystem(A, B, C, D)

                                                  A linear time-invariant system with of the form

                                                  \[x' = Ax + Bu,\\ +y = Cx + Du.\]

                                                  Input

                                                  • A – matrix
                                                  • B – matrix
                                                  • C – matrix
                                                  • D – matrix

                                                  Output

                                                  A system with output such that the system is a linear control continuous system and the output map is a linear control map.

                                                  source
                                                  LinearTimeInvariantSystem(A, B, C, D, X, U)

                                                  A linear time-invariant system with state and input constraints of the form

                                                  \[x' = Ax + Bu,\\ +y = Cx + Du,\]

                                                  where $x(t) ∈ X$ and $u(t) ∈ U$ for all $t$.

                                                  Input

                                                  • A – matrix
                                                  • B – matrix
                                                  • C – matrix
                                                  • D – matrix
                                                  • X – state constraints
                                                  • U – input constraints

                                                  Output

                                                  A system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.

                                                  source
                                                  LTISystem

                                                  LTISystem is an alias for LinearTimeInvariantSystem.

                                                  source
                                                  diff --git a/v0.9.0/search/index.html b/v0.9.0/search/index.html new file mode 100644 index 00000000..f64bedcd --- /dev/null +++ b/v0.9.0/search/index.html @@ -0,0 +1,2 @@ + +Search · MathematicalSystems.jl

                                                  Search

                                                  Search

                                                  Number of results: loading...

                                                    diff --git a/v0.9.0/search_index.js b/v0.9.0/search_index.js new file mode 100644 index 00000000..27d8462c --- /dev/null +++ b/v0.9.0/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"lib/internals/#Internals-1","page":"Internals","title":"Internals","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"This section describes functions that are internal to the library.","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"Pages = [\"internals.md\"]\nDepth = 3","category":"page"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/internals/#Expression-handling-1","page":"Internals","title":"Expression handling","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"_corresponding_type\n_capture_dim\nadd_asterisk","category":"page"},{"location":"lib/internals/#MathematicalSystems._corresponding_type","page":"Internals","title":"MathematicalSystems._corresponding_type","text":"_corresponding_type(AT::Type{<:AbstractSystem}, fields::Tuple)\n\nReturn the system type whose field names match those in fields.\n\nInput\n\nAT – abstract system type, which can be either AbstractContinuousSystem or AbstractDiscreSystem\nfields – tuple of field names\n\nOutput\n\nThe system type (either discrete or continous, depending on AT) whose fields names correspond to those in fields, or an error if the fields do not match any known system type.\n\nExamples\n\njulia> using MathematicalSystems: _corresponding_type\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A),))\nLinearContinuousSystem\n\njulia> _corresponding_type(AbstractContinuousSystem, ((:A), (:B), (:X), (:U)))\nConstrainedLinearControlContinuousSystem\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems._capture_dim","page":"Internals","title":"MathematicalSystems._capture_dim","text":"_capture_dim(expr)\n\nReturn the tuple containing the dimension(s) in expr.\n\nInput\n\nexpr – symbolic expression that can be of any of the following forms:\n:x or :(x) – state dimension\n:(x, u) – state and input dimension\n:(x, u, w) – state, input and noise dimensions\n\nOutput\n\nThe scalar x if expr specifies the state dimension.\nThe vector [x, u] if expr specifies state and input dimension.\nThe vector [x, u, w] if expr specifies state, input and noise dimensions.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.add_asterisk","page":"Internals","title":"MathematicalSystems.add_asterisk","text":"add_asterisk(summand, state::Symbol, input::Symbol, noise::Symbol)\n\nChecks if expression summand contains state, input or noise at its end. If so, a multiplication expression, e.g. Expr(:call, :*, :A, :x) is created. If not,summand` is returned.\n\nInput\n\nsummand – expressions\nstate – state variable\ninput – input variable\nnoise – noise variable, if available\n\nOutput\n\nMultiplication expression or symbol.\n\nExample\n\njulia> using MathematicalSystems: add_asterisk\n\njulia> add_asterisk(:(A1*x), :x, :u, :w)\n:(A1 * x)\n\njulia> add_asterisk(:(c1), :x, :u, :w)\n:c1\n\njulia> add_asterisk(:(Ax1), :x1, :u, :w)\n:(A * x1)\n\njulia> add_asterisk(:(Awb), :x1, :u, :wb)\n:(A * wb)\n\njulia> add_asterisk(:(A1u), :x, :u, :w)\n:(A1 * u)\n\njulia> add_asterisk(:(A1ub), :x, :u, :w)\n:A1ub\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#Querying-expressions-1","page":"Internals","title":"Querying expressions","text":"","category":"section"},{"location":"lib/internals/#","page":"Internals","title":"Internals","text":"is_equation\nextract_sum","category":"page"},{"location":"lib/internals/#MathematicalSystems.is_equation","page":"Internals","title":"MathematicalSystems.is_equation","text":"is_equation(expr)\n\nReturn true if the given expression expr corresponds to an equation lhs = rhs and false otherwise. This function just detects the presence of the symbol =.\n\nInput\n\nexpr – expression\n\nOutput\n\nA Bool indicating whether expr is an equation or not.\n\n\n\n\n\n","category":"function"},{"location":"lib/internals/#MathematicalSystems.extract_sum","page":"Internals","title":"MathematicalSystems.extract_sum","text":"extract_sum(summands, state::Symbol, input::Symbol, noise::Symbol)\n\nExtract the variable name and field name for every element of summands which corresponds to the elements of the right-hand side of an affine system.\n\nInput\n\nsummands – array of expressions\nstate – state variable\ninput – input variable\nnoise – noise variable\n\nOutput\n\nArray of tuples of symbols with variable name and field name.\n\nExample\n\njulia> using MathematicalSystems: extract_sum\n\njulia> extract_sum([:(A1*x)], :x, :u, :w)\n1-element Array{Tuple{Any,Symbol},1}:\n (:A1, :A)\n\njulia> extract_sum([:(A1*x), :(B1*u), :c], :x, :u, :w)\n3-element Array{Tuple{Any,Symbol},1}:\n (:A1, :A)\n (:B1, :B)\n (:c, :c)\n\njulia> extract_sum([:(A1*x7), :( B1*u7), :( B2*w7)], :x7, :u7, :w7)\n3-element Array{Tuple{Any,Symbol},1}:\n (:A1, :A)\n (:B1, :B)\n (:B2, :D)\n\nNotes\n\nIf an element of summands is a multiplication expression lhs*rhs, return lhs as variable name and :A as field name if rhs==state, :B as field name if rhs==input and :D as field name if rhs==noise.\n\nIf an element of summands is a symbol, and not equal to input or noise, the symbol is the variable name and the field name is :c. If it is equal to input, the variable name is a IdentityMultiple(I,state_dim) where state_dim is extracted from the state matrix (i.e. take the symbol lhs of lhs*rhs where rhs==state which corresponds to the state matrix and generate the expression state_dim = size(lhs,1) which is evaluated in the scope where @system is called) and the field name is :B.\n\nSimiliarily, if the element is equal to noise, the variable name is IdentityMultiple(I, state_dim) and the field name is :D.\n\n\n\n\n\n","category":"function"},{"location":"about/#About-1","page":"About","title":"About","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This page contains some general information about this project, and recommendations about contributing.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Pages = [\"about.md\"]","category":"page"},{"location":"about/#Contributing-1","page":"About","title":"Contributing","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"If you like this package, consider contributing! You can send bug reports (or fix them and send your code), add examples to the documentation, or propose new features.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below some conventions that we follow when contributing to this package are detailed. For specific guidelines on documentation, see the Documentations Guidelines wiki.","category":"page"},{"location":"about/#Branches-and-pull-requests-(PR)-1","page":"About","title":"Branches and pull requests (PR)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"We use a standard pull request policy: You work in a private branch and eventually add a pull request, which is then reviewed by other programmers and merged into the master branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Each pull request should be pushed in a new branch with the name of the author followed by a descriptive name, e.g., mforets/my_feature. If the branch is associated to a previous discussion in one issue, we use the name of the issue for easier lookup, e.g., mforets/7.","category":"page"},{"location":"about/#Unit-testing-and-continuous-integration-(CI)-1","page":"About","title":"Unit testing and continuous integration (CI)","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This project is synchronized with Travis CI such that each PR gets tested before merging (and the build is automatically triggered after each new commit). For the maintainability of this project, it is important to understand and fix the failing doctests if they exist. We develop in Julia v0.6.0, but for experimentation we also build on the nightly branch.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"When you modify code in this package, you should make sure that all unit tests pass. To run the unit tests locally, you should do:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes test/runtests.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Alternatively, you can achieve the same from inside the REPL using the following command:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> Pkg.test(\"MathematicalSystems\")","category":"page"},{"location":"about/#","page":"About","title":"About","text":"We also advise adding new unit tests when adding new features to ensure long-term support of your contributions.","category":"page"},{"location":"about/#Contributing-to-the-documentation-1","page":"About","title":"Contributing to the documentation","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"New functions and types should be documented according to our guidelines directly in the source code.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"You can view the source code documentation from inside the REPL by typing ? followed by the name of the type or function. For example, the following command will print the documentation of the AbstractSystem type:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"julia> ?LinearContinuousSystem","category":"page"},{"location":"about/#","page":"About","title":"About","text":"This documentation you are currently reading is written in Markdown, and it relies on Documenter.jl to produce the HTML layout. The sources for creating this documentation are found in docs/src. You can easily include the documentation that you wrote for your functions or types there (see the Documenter.jl guide or our sources for examples).","category":"page"},{"location":"about/#","page":"About","title":"About","text":"To generate the documentation locally, run make.jl, e.g., by executing the following command in the terminal:","category":"page"},{"location":"about/#","page":"About","title":"About","text":"$ julia --color=yes docs/make.jl","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Note that this also runs all doctests which will take some time.","category":"page"},{"location":"about/#Related-projects-1","page":"About","title":"Related projects","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"This package originated from Hybrid Systems and systems definitions for reachability problems within JuliaReach.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Below we list more related projects.","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Package name Description\nHybridSystems.jl Hybrid Systems definitions in Julia.\nLTISystems.jl Julia package for representing linear time-invariant system models and operations defined on them.\nControlToolbox.jl Analysis and design tools for control systems.\nronisbr/ControlToolbox.jl A Control Toolbox for Julia language.\nDynamicalSystemsBase.jl Definitions of core system and data types used in the ecosystem of DynamicalSystems.jl.\nControlSystems.jl A Control Systems Toolbox for Julia\nModelingToolkit.jl A toolkit for modeling and creating DSLs for Scientific Computing in Julia","category":"page"},{"location":"about/#Credits-1","page":"About","title":"Credits","text":"","category":"section"},{"location":"about/#","page":"About","title":"About","text":"These persons have contributed to MathematicalSystems.jl (in alphabetic order):","category":"page"},{"location":"about/#","page":"About","title":"About","text":"Marcelo Forets\nBenoît Legat\nChristian Schilling","category":"page"},{"location":"lib/types/#Types-1","page":"Types","title":"Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"This section describes systems types implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"Pages = [\"types.md\"]\nDepth = 3","category":"page"},{"location":"lib/types/#","page":"Types","title":"Types","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/types/#Abstract-Systems-1","page":"Types","title":"Abstract Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractSystem\nAbstractContinuousSystem\nAbstractDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractSystem","page":"Types","title":"MathematicalSystems.AbstractSystem","text":"AbstractSystem\n\nAbstract supertype for all system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractContinuousSystem","page":"Types","title":"MathematicalSystems.AbstractContinuousSystem","text":"AbstractContinuousSystem\n\nAbstract supertype for all continuous system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AbstractDiscreteSystem","page":"Types","title":"MathematicalSystems.AbstractDiscreteSystem","text":"AbstractDiscreteSystem\n\nAbstract supertype for all discrete system types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Continuous-Systems-1","page":"Types","title":"Continuous Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"ContinuousIdentitySystem\nConstrainedContinuousIdentitySystem\nLinearContinuousSystem\nAffineContinuousSystem\nLinearControlContinuousSystem\nConstrainedLinearContinuousSystem\nConstrainedAffineContinuousSystem\nConstrainedAffineControlContinuousSystem\nConstrainedLinearControlContinuousSystem\nLinearAlgebraicContinuousSystem\nConstrainedLinearAlgebraicContinuousSystem\nPolynomialContinuousSystem\nConstrainedPolynomialContinuousSystem\nBlackBoxContinuousSystem\nConstrainedBlackBoxContinuousSystem\nConstrainedBlackBoxControlContinuousSystem\nNoisyConstrainedLinearContinuousSystem\nNoisyConstrainedLinearControlContinuousSystem\nNoisyConstrainedAffineControlContinuousSystem\nNoisyConstrainedBlackBoxControlContinuousSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.ContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ContinuousIdentitySystem","text":"ContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system of the form:\n\n x = 0\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedContinuousIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedContinuousIdentitySystem","text":"ConstrainedContinuousIdentitySystem <: AbstractContinuousSystem\n\nTrivial identity continuous-time system with state constraints of the form:\n\n x = 0 x(t) mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearContinuousSystem","page":"Types","title":"MathematicalSystems.LinearContinuousSystem","text":"LinearContinuousSystem\n\nContinuous-time linear system of the form:\n\n x = A x\n\nFields\n\nA – square matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineContinuousSystem","page":"Types","title":"MathematicalSystems.AffineContinuousSystem","text":"AffineContinuousSystem\n\nContinuous-time affine system of the form:\n\n x = A x + c\n\nFields\n\nA – square matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.LinearControlContinuousSystem","text":"LinearControlContinuousSystem\n\nContinuous-time linear control system of the form:\n\n x = A x + B u\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearContinuousSystem","text":"ConstrainedLinearContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n x = A x x(t) mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineContinuousSystem","text":"ConstrainedAffineContinuousSystem\n\nContinuous-time affine system with state constraints of the form:\n\n x = A x + c x(t) mathcalX\n\nFields\n\nA – square matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlContinuousSystem","text":"ConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c x(t) mathcalX u(t) mathcalU text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlContinuousSystem","text":"ConstrainedLinearControlContinuousSystem\n\nContinuous-time linear control system with state constraints of the form:\n\n x = A x + B u x(t) mathcalX u(t) mathcalU text for all t\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicContinuousSystem","text":"LinearAlgebraicContinuousSystem\n\nContinuous-time linear algebraic system of the form:\n\n E x = A x\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicContinuousSystem","text":"ConstrainedLinearAlgebraicContinuousSystem\n\nContinuous-time linear system with state constraints of the form:\n\n E x = A x x(t) mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.PolynomialContinuousSystem","text":"PolynomialContinuousSystem\n\nContinuous-time polynomial system of the form:\n\n x = p(x)\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialContinuousSystem","text":"ConstrainedPolynomialContinuousSystem\n\nContinuous-time polynomial system with state constraints:\n\n x = p(x) x(t) mathcalX\n\nFields\n\np – polynomial vector field\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.BlackBoxContinuousSystem","text":"BlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side of the form:\n\n x = f(x(t))\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxContinuousSystem","text":"ConstrainedBlackBoxContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t)) x(t) mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem","text":"ConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state and input constraints of the form:\n\n x = f(x(t) u(t)) x(t) mathcalX u(t) mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearContinuousSystem","text":"NoisyConstrainedLinearContinuousSystem\n\nContinuous-time linear system with additive disturbance and state constraints of the form:\n\n x = A x + D w x(t) mathcalX w(t) mathcalW\n\nFields\n\nA – square matrix\nD – matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlContinuousSystem","text":"NoisyConstrainedLinearControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlContinuousSystem","text":"NoisyConstrainedAffineControlContinuousSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x = A x + B u + c + Dw x(t) mathcalX u(t) mathcalU w(t) mathcalW text for all t\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlContinuousSystem","text":"NoisyConstrainedBlackBoxControlContinuousSystem <: AbstractContinuousSystem\n\nContinuous-time control system defined by a right-hand side with state constraints of the form:\n\n x = f(x(t) u(t) w(t)) x(t) mathcalX u(t) mathcalU w(t) mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Discrete-Systems-1","page":"Types","title":"Discrete Systems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"DiscreteIdentitySystem\nConstrainedDiscreteIdentitySystem\nLinearDiscreteSystem\nAffineDiscreteSystem\nLinearControlDiscreteSystem\nConstrainedLinearDiscreteSystem\nConstrainedAffineDiscreteSystem\nConstrainedLinearControlDiscreteSystem\nConstrainedAffineControlDiscreteSystem\nLinearAlgebraicDiscreteSystem\nConstrainedLinearAlgebraicDiscreteSystem\nPolynomialDiscreteSystem\nConstrainedPolynomialDiscreteSystem\nBlackBoxDiscreteSystem\nConstrainedBlackBoxDiscreteSystem\nConstrainedBlackBoxControlDiscreteSystem\nNoisyConstrainedLinearDiscreteSystem\nNoisyConstrainedLinearControlDiscreteSystem\nNoisyConstrainedAffineControlDiscreteSystem\nNoisyConstrainedBlackBoxControlDiscreteSystem","category":"page"},{"location":"lib/types/#MathematicalSystems.DiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.DiscreteIdentitySystem","text":"DiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system of the form:\n\n x_k+1 = x_k\n\nFields\n\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedDiscreteIdentitySystem","page":"Types","title":"MathematicalSystems.ConstrainedDiscreteIdentitySystem","text":"ConstrainedDiscreteIdentitySystem <: AbstractDiscreteSystem\n\nTrivial identity discrete-time system with state constraints of the form:\n\n x_k+1 = x_k x_k mathcalX\n\nFields\n\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearDiscreteSystem","text":"LinearDiscreteSystem\n\nDiscrete-time linear system of the form:\n\n x_k+1 = A x_k\n\nFields\n\nA – square matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineDiscreteSystem","page":"Types","title":"MathematicalSystems.AffineDiscreteSystem","text":"AffineDiscreteSystem\n\nDiscrete-time affine system of the form:\n\n x_k+1 = A x_k + c\n\nFields\n\nA – square matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearControlDiscreteSystem","text":"LinearControlDiscreteSystem\n\nDiscrete-time linear control system of the form:\n\n x_k+1 = A x_k + B u_k\n\nFields\n\nA – square matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearDiscreteSystem","text":"ConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – square matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineDiscreteSystem","text":"ConstrainedAffineDiscreteSystem\n\nDiscrete-time affine system with state constraints of the form:\n\n x_k+1 = A x_k + c x_k mathcalX text for all k\n\nFields\n\nA – square matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlDiscreteSystem","text":"ConstrainedLinearControlDiscreteSystem\n\nDiscrete-time linear control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k x_k mathcalX u_k mathcalU text for all k\n\nFields\n\nA – square matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlDiscreteSystem","text":"ConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c x_k mathcalX u_k mathcalU text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.LinearAlgebraicDiscreteSystem","text":"LinearAlgebraicDiscreteSystem\n\nDiscrete-time linear algebraic system of the form:\n\n E x_k+1 = A x_k\n\nFields\n\nA – matrix\nE – matrix, same size as A\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedLinearAlgebraicDiscreteSystem","text":"ConstrainedLinearAlgebraicDiscreteSystem\n\nDiscrete-time linear system with state constraints of the form:\n\n E x_k+1 = A x_k x_k mathcalX\n\nFields\n\nA – matrix\nE – matrix, same size as A\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.PolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.PolynomialDiscreteSystem","text":"PolynomialDiscreteSystem\n\nDiscrete-time polynomial system of the form:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial vector field\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedPolynomialDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedPolynomialDiscreteSystem","text":"ConstrainedPolynomialDiscreteSystem\n\nDiscrete-time polynomial system with state constraints:\n\n x_k+1 = p(x_k) x_k mathcalX\n\nFields\n\np – polynomial\nX – constraint set\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.BlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.BlackBoxDiscreteSystem","text":"BlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side of the form:\n\n x_k+1 = f(x_k)\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxDiscreteSystem","text":"ConstrainedBlackBoxDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k) x_k mathcalX\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.ConstrainedBlackBoxControlDiscreteSystem","text":"ConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state and input constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearDiscreteSystem","text":"NoisyConstrainedLinearDiscreteSystem\n\nDiscrete-time linear system with additive disturbance and state constraints of the form:\n\n x_k+1 = A x_k + D w_k x_k mathcalX w(t) mathcalW \n\nFields\n\nA – square matrix\nD – matrix\nX – state constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedLinearControlDiscreteSystem","text":"NoisyConstrainedLinearControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedAffineControlDiscreteSystem","text":"NoisyConstrainedAffineControlDiscreteSystem\n\nContinuous-time affine control system with state constraints of the form:\n\n x_k+1 = A x_k + B u_k + c + D w_k x_k mathcalX u_k mathcalU w_k mathcalW text for all k\n\nand c a vector.\n\nFields\n\nA – square matrix\nB – matrix\nc – vector\nD – matrix\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","page":"Types","title":"MathematicalSystems.NoisyConstrainedBlackBoxControlDiscreteSystem","text":"NoisyConstrainedBlackBoxControlDiscreteSystem <: AbstractDiscreteSystem\n\nDiscrete-time control system defined by a right-hand side with state constraints of the form:\n\n x_k+1 = f(x_k u_k) x_k mathcalX u_k mathcalU w_k mathcalW\n\nFields\n\nf – function that holds the right-hand side\nstatedim – number of state variables\ninputdim – number of input variables\nX – state constraints\nU – input constraints\nW – disturbance set\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#System-macro-1","page":"Types","title":"System macro","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@system","category":"page"},{"location":"lib/types/#MathematicalSystems.@system","page":"Types","title":"MathematicalSystems.@system","text":"system(expr...)\n\nReturn an instance of the system type corresponding to the given expressions.\n\nInput\n\nexpr – expressions separated by commas which define the dynamic equation, the constraint sets or the dimensionality of the system\n\nOutput\n\nA system that best matches the given expressions.\n\nNotes\n\nTerms. The expression expr contains one or more of the following sub-expressions:\n\ndynamic equation, either continuous, e.g.x' = Ax, or discrete, e.g. x⁺ = Ax\nset constraints, e.g. x ∈ X\ninput constraints, e.g. u ∈ U\ndimensionality, e.g. dim: (2,1) or dim = 1\nspecification of the input variable, e.g. input: u or input = u\nspecification of the noise variable, e,g, noise: w or noise = w\n\nThe macro call is then formed by separating the previous sub-expressions (which we simply call terms hereafter), as in:\n\n@system(dynamic eq., set constr., input constr., input specif., noise spec., dimens.)\n\nThe different terms that compose the system's definition do not have to appear in any particular order. Moreover, the only mandatory term is the dynamic equation; the other terms are optional and default values may apply depending on the system type; this is explained next.\n\nDynamic equation. The time derivative in a continuous system is specified by using ', as in x' = A*x. A discrete system is specified using ⁺ (which can be written with the combination of keys \\^+[TAB]), as in x⁺ = A*x. Moreover, the asterisk denoting matrix-vector products is optional. For instance, both x' = Ax and x' = A*x are parsed as the linear continuous system whose state matrix is A. The matrix is supposed to be defined at the call site.\n\nDefault values. When the dynamic equation is parsed, the variable on the left-hand side is interpreted as the state variable. The input variable is by default u and the noise variable is by default w. If we want to change the default name of the input variable, this can be done by adding the term input: var (or equivalently, input=var) where var corresponds to the new name of the input variable, eg. @system(x' = A*x + B*v, input:v). Similarly, a noise variable is specified with noise: var or noise=var.\n\nExceptions. The following exceptions and particular cases apply:\n\nIf the right-hand side has the form A*x + B*foo or A*x + B*foo + c, the equation is parsed as a controlled linear (affine) system with input foo. Note that in this case, input variable does not correspond to the default value of u, but foo is parsed as being the input.\nIf the left-hand side contains a multiplicative term in the form E*x⁺ or E*x', the equation is parsed as an algebraic system. In this case, the asterisk * operator is mandatory.\nSystems of the form x' = α*x where α is a scalar are parsed as linear systems. The default dimension is 1; if the system is higher-dimensional, use dim, as in x' = 2x, dim=3.\n\nExamples\n\nLet us first create a continuous linear system using this macro:\n\njulia> A = [1. 0; 0 1.];\n\njulia> @system(x' = A*x)\nLinearContinuousSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nA discrete system is defined by using ⁺:\n\njulia> @system(x⁺ = A*x)\nLinearDiscreteSystem{Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0])\n\nAdditionally, a set definition x ∈ X can be added to create a constrained system. For example, a discrete controlled affine system with constrained states and inputs writes as:\n\njulia> using LazySets\n\njulia> B = Matrix([1. 0.5]');\n\njulia> c = [1., 1.5];\n\njulia> X = BallInf(zeros(2), 10.);\n\njulia> U = BallInf(zeros(1), 2.);\n\njulia> @system(x' = A*x + B*u + c, x ∈ X, u ∈ U)\nConstrainedAffineControlContinuousSystem{Float64,Array{Float64,2},Array{Float64,2},Array{Float64,1},BallInf{Float64},BallInf{Float64}}([1.0 0.0; 0.0 1.0], [1.0; 0.5], [1.0, 1.5], BallInf{Float64}([0.0, 0.0], 10.0), BallInf{Float64}([0.0], 2.0))\n\nFor the creation of a black-box system, the state, input and noise dimensions have to be defined separately. For a constrained controlled black-box system, the macro writes as\n\njulia> f(x, u) = x + u;\n\njulia> @system(x⁺ = f(x, u), x ∈ X, u ∈ U, dim: (2,2))\nConstrainedBlackBoxControlDiscreteSystem{typeof(f),BallInf{Float64},BallInf{Float64}}(f, 2, 2, BallInf{Float64}([0.0, 0.0], 10.0), BallInf{Float64}([0.0], 2.0))\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Identity-operator-1","page":"Types","title":"Identity operator","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"IdentityMultiple","category":"page"},{"location":"lib/types/#MathematicalSystems.IdentityMultiple","page":"Types","title":"MathematicalSystems.IdentityMultiple","text":"IdentityMultiple{T} < AbstractMatrix{T} where T\n\nA scalar multiple of the identity matrix of given order and numeric type.\n\nFields\n\nM – uniform scaling operator of type T\nn – size of the identity matrix\n\nNotes\n\nThis type can be used to create multiples of the identity of given size. Since only the multiple and the order are stored, the allocations are minimal.\n\nInternally, the type wraps Julia's lazy multiple of the identity operator, UniformScaling. IdentityMultiple subtypes AbstractMatix, hence it can be used in usual matrix arithmetic and for dispatch on AbstractMatrix.\n\nThe difference between UniformScaling and IdentityMultiple is that while the size of the former is generic, the size of the latter is fixed.\n\nExamples\n\nThe easiest way to create an identity multiple is to use the callable version of LinearAlgebra.I:\n\njulia> using MathematicalSystems: IdentityMultiple\n\njulia> I2 = I(2)\nIdentityMultiple{Float64} of value 1.0 and order 2\n\njulia> I2 + I2\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> 4*I2\nIdentityMultiple{Float64} of value 4.0 and order 2\n\nThe numeric type (default Float64) can be passed as a second argument:\n\njulia> I2r = I(2, Rational{Int})\nIdentityMultiple{Rational{Int64}} of value 1//1 and order 2\n\njulia> I2r + I2r\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\njulia> 4*I2r\nIdentityMultiple{Rational{Int64}} of value 4//1 and order 2\n\nTo create the matrix with a value different from the default (1.0), there are two ways. Either pass the value through the callable I, as in\n\njulia> I2 = I(2.0, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = I(2//1, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\nOr use the lower level constructor passing the UniformScaling (I):\n\njulia> I2 = IdentityMultiple(2.0*I, 2)\nIdentityMultiple{Float64} of value 2.0 and order 2\n\njulia> I2r = IdentityMultiple(2//1*I, 2)\nIdentityMultiple{Rational{Int64}} of value 2//1 and order 2\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Initial-Value-Problems-1","page":"Types","title":"Initial Value Problems","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"InitialValueProblem\nIVP","category":"page"},{"location":"lib/types/#MathematicalSystems.InitialValueProblem","page":"Types","title":"MathematicalSystems.InitialValueProblem","text":"InitialValueProblem\n\nParametric composite type for initial value problems. It is parameterized in the system's type.\n\nFields\n\ns – system\nx0 – initial state\n\nExamples\n\nThe linear system x = -x with initial condition x_0 = -12 12:\n\njulia> p = InitialValueProblem(LinearContinuousSystem([-1.0 0.0; 0.0 -1.0]), [-1/2, 1/2]);\n\njulia> p.x0\n2-element Array{Float64,1}:\n -0.5\n 0.5\n\njulia> statedim(p)\n2\n\njulia> inputdim(p)\n0\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IVP","page":"Types","title":"MathematicalSystems.IVP","text":"IVP\n\nIVP is an alias for InitialValueProblem.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Input-Types-1","page":"Types","title":"Input Types","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractInput\nConstantInput\nVaryingInput","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractInput","page":"Types","title":"MathematicalSystems.AbstractInput","text":"AbstractInput\n\nAbstract supertype for all input types.\n\nNotes\n\nThe input types defined here implement an iterator interface, such that other methods can build upon the behavior of inputs which are either constant or varying.\n\nIteration is supported with an index number called iterator state. The iteration function Base.iterate takes and returns a tuple (input, state), where input represents the value of the input, and state is an index which counts the number of times this iterator was called.\n\nA convenience function nextinput(input, n) is also provided and it returns the first n elements of input.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstantInput","page":"Types","title":"MathematicalSystems.ConstantInput","text":"ConstantInput{UT} <: AbstractInput\n\nType representing an input that remains constant in time.\n\nFields\n\nU – input set\n\nExamples\n\nThe constant input holds a single element and its length is infinite. To access the field U, you can use Base's iterate given a state, or the method nextinput given the number of desired input elements:\n\njulia> c = ConstantInput(-1//2)\nConstantInput{Rational{Int64}}(-1//2)\n\njulia> iterate(c, 1)\n(-1//2, nothing)\n\njulia> iterate(c, 2)\n(-1//2, nothing)\n\njulia> collect(nextinput(c, 4))\n4-element Array{Rational{Int64},1}:\n -1//2\n -1//2\n -1//2\n -1//2\n\nThe elements of this input are rational numbers:\n\njulia> eltype(c)\nRational{Int64}\n\nTo transform a constant input, you can use map as in:\n\njulia> map(x->2*x, c)\nConstantInput{Rational{Int64}}(-1//1)\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.VaryingInput","page":"Types","title":"MathematicalSystems.VaryingInput","text":"VaryingInput{UT, VUT<:AbstractVector{UT}} <: AbstractInput\n\nType representing an input that may vary with time.\n\nFields\n\nU – vector of input sets\n\nExamples\n\nThe varying input holds a vector and its length equals the number of elements in the vector. Consider an input given by a vector of rational numbers:\n\njulia> v = VaryingInput([-1//2, 1//2])\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//2, 1//2])\n\njulia> length(v)\n2\n\njulia> eltype(v)\nRational{Int64}\n\nBase's iterate method receives the input and an integer state and returns the input element and the next iteration state:\n\njulia> iterate(v, 1)\n(-1//2, 2)\n\njulia> iterate(v, 2)\n(1//2, 3)\n\nThe method nextinput receives a varying input and an integer n and returns an iterator over the first n elements of this input (where n=1 by default):\n\njulia> typeof(nextinput(v))\nBase.Iterators.Take{VaryingInput{Rational{Int64},Array{Rational{Int64},1}}}\n\njulia> collect(nextinput(v, 1))\n1-element Array{Rational{Int64},1}:\n -1//2\n\njulia> collect(nextinput(v, 2))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nYou can collect the inputs in an array, or equivalently use list comprehension, (or use a for loop):\n\njulia> collect(v)\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\njulia> [2*vi for vi in v]\n2-element Array{Rational{Int64},1}:\n -1//1\n 1//1\n\nSince this input type is finite, querying more elements than its length returns the full vector:\n\njulia> collect(nextinput(v, 4))\n2-element Array{Rational{Int64},1}:\n -1//2\n 1//2\n\nTo transform a varying input, you can use map as in:\n\njulia> map(x->2*x, v)\nVaryingInput{Rational{Int64},Array{Rational{Int64},1}}(Rational{Int64}[-1//1, 1//1])\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Maps-1","page":"Types","title":"Maps","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"AbstractMap\nIdentityMap\nConstrainedIdentityMap\nLinearMap\nConstrainedLinearMap\nAffineMap\nConstrainedAffineMap\nLinearControlMap\nConstrainedLinearControlMap\nAffineControlMap\nConstrainedAffineControlMap\nResetMap\nConstrainedResetMap","category":"page"},{"location":"lib/types/#MathematicalSystems.AbstractMap","page":"Types","title":"MathematicalSystems.AbstractMap","text":"AbstractMap\n\nAbstract supertype for all map types.\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.IdentityMap","page":"Types","title":"MathematicalSystems.IdentityMap","text":"IdentityMap\n\nAn identity map,\n\n x x\n\nFields\n\ndim – dimension\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedIdentityMap","page":"Types","title":"MathematicalSystems.ConstrainedIdentityMap","text":"ConstrainedIdentityMap\n\nAn identity map with state constraints of the form:\n\n x x x(t) mathcalX\n\nFields\n\ndim – dimension\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearMap","page":"Types","title":"MathematicalSystems.LinearMap","text":"LinearMap\n\nA linear map,\n\n x Ax\n\nFields\n\nA – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearMap","text":"ConstrainedLinearMap\n\nA linear map with state constraints of the form:\n\n x Ax x(t) mathcalX\n\nFields\n\nA – matrix\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineMap","page":"Types","title":"MathematicalSystems.AffineMap","text":"AffineMap\n\nAn affine map,\n\n x Ax + c\n\nFields\n\nA – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineMap","text":"ConstrainedAffineMap\n\nAn affine map with state constraints of the form:\n\n x Ax + c x(t) mathcalX\n\nFields\n\nA – matrix\nc – vector\nX – state constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearControlMap","page":"Types","title":"MathematicalSystems.LinearControlMap","text":"LinearControlMap\n\nA linear control map,\n\n (x u) Ax + Bu\n\nFields\n\nA – matrix\nB – matrix\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedLinearControlMap","page":"Types","title":"MathematicalSystems.ConstrainedLinearControlMap","text":"ConstrainedLinearControlMap\n\nA linear control map with state and input constraints,\n\n (x u) Ax + Bu x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.AffineControlMap","page":"Types","title":"MathematicalSystems.AffineControlMap","text":"AffineControlMap\n\nAn affine control map,\n\n (x u) Ax + Bu + c\n\nFields\n\nA – matrix\nB – matrix\nc – vector\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedAffineControlMap","page":"Types","title":"MathematicalSystems.ConstrainedAffineControlMap","text":"ConstrainedAffineControlMap\n\nAn affine control map with state and input constraints,\n\n (x u) Ax + Bu + c x mathcalX u mathcalU\n\nFields\n\nA – matrix\nB – matrix\nc – vector\nX – state constraints\nU – input constraints\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ResetMap","page":"Types","title":"MathematicalSystems.ResetMap","text":"ResetMap\n\nA reset map,\n\n x R(x)\n\nsuch that a subset of the variables is given a specified value, and the rest are unchanged.\n\nFields\n\ndim – dimension\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.ConstrainedResetMap","page":"Types","title":"MathematicalSystems.ConstrainedResetMap","text":"ConstrainedResetMap\n\nA reset map with state constraints of the form:\n\n x R(x) x mathcalX\n\nsuch that the specified variables are assigned a given value, and the remaining variables are unchanged.\n\nFields\n\ndim – dimension\nX – state constraints\ndict – dictionary whose keys are the indices of the variables that are reset, and whose values are the new values\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#Macros-1","page":"Types","title":"Macros","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"@map","category":"page"},{"location":"lib/types/#MathematicalSystems.@map","page":"Types","title":"MathematicalSystems.@map","text":"map(ex, args)\n\nReturn an instance of the map type corresponding to the given expression.\n\nInput\n\nex – an expression defining the map, in the form of an anonymous function\nargs – additional optional arguments\n\nOutput\n\nA map that best matches the given expression.\n\nExamples\n\nLet us first create a linear map using this macro:\n\njulia> @map x -> [1 0; 0 0]*x\nLinearMap{Int64,Array{Int64,2}}([1 0; 0 0])\n\nWe can create an affine system as well:\n\njulia> @map x -> [1 0; 0 0]*x + [2, 0]\nAffineMap{Int64,Array{Int64,2},Array{Int64,1}}([1 0; 0 0], [2, 0])\n\nAdditional arguments can be passed to @map using the function-call form, i.e. separating the arguments by commas, and using parentheses around the macro call. For example, an identity map of dimension 5 can be defined as:\n\njulia> @map(x -> x, dim=5)\nIdentityMap(5)\n\nAn identity map can alternatively be created by giving a the size of the identity matrix as I(n), for example:\n\njulia> @map x -> I(5)*x\nIdentityMap(5)\n\n\n\n\n\n","category":"macro"},{"location":"lib/types/#Systems-with-output-1","page":"Types","title":"Systems with output","text":"","category":"section"},{"location":"lib/types/#","page":"Types","title":"Types","text":"SystemWithOutput\nLinearTimeInvariantSystem\nLTISystem","category":"page"},{"location":"lib/types/#MathematicalSystems.SystemWithOutput","page":"Types","title":"MathematicalSystems.SystemWithOutput","text":"SystemWithOutput{ST<:AbstractSystem, MT<:AbstractMap}\n\nParametric composite type for systems with outputs. It is parameterized in the system's type (ST) and in the map's type (MT).\n\nFields\n\ns – system of type ST\noutputmap – output map of type MT\n\n\n\n\n\n","category":"type"},{"location":"lib/types/#MathematicalSystems.LinearTimeInvariantSystem","page":"Types","title":"MathematicalSystems.LinearTimeInvariantSystem","text":"LinearTimeInvariantSystem(A, B, C, D)\n\nA linear time-invariant system with of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\n\nOutput\n\nA system with output such that the system is a linear control continuous system and the output map is a linear control map.\n\n\n\n\n\nLinearTimeInvariantSystem(A, B, C, D, X, U)\n\nA linear time-invariant system with state and input constraints of the form\n\nx = Ax + Bu\ny = Cx + Du\n\nwhere x(t) X and u(t) U for all t.\n\nInput\n\nA – matrix\nB – matrix\nC – matrix\nD – matrix\nX – state constraints\nU – input constraints\n\nOutput\n\nA system with output such that the system is a constrained linear control continuous system and the output map is a constrained linear control map.\n\n\n\n\n\n","category":"function"},{"location":"lib/types/#MathematicalSystems.LTISystem","page":"Types","title":"MathematicalSystems.LTISystem","text":"LTISystem\n\nLTISystem is an alias for LinearTimeInvariantSystem.\n\n\n\n\n\n","category":"function"},{"location":"#MathematicalSystems.jl-1","page":"Home","title":"MathematicalSystems.jl","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"DocTestFilters = [r\"[0-9\\.]+ seconds \\(.*\\)\"]","category":"page"},{"location":"#","page":"Home","title":"Home","text":"MathematicalSystems is a Julia package for mathematical systems interfaces.","category":"page"},{"location":"#Features-1","page":"Home","title":"Features","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Generic and flexible systems definitions, while being fast and type stable.\nTypes for mathematical systems modeling: continuous, discrete, controlled, linear algebraic, etc.\nIterator interfaces to handle constant or time-varying inputs.","category":"page"},{"location":"#Library-Outline-1","page":"Home","title":"Library Outline","text":"","category":"section"},{"location":"#","page":"Home","title":"Home","text":"Pages = [\n \"lib/types.md\",\n \"lib/methods.md\",\n \"lib/internals.md\"\n]\nDepth = 2","category":"page"},{"location":"lib/methods/#Methods-1","page":"Methods","title":"Methods","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"This section describes systems methods implemented in MathematicalSystems.jl.","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"Pages = [\"methods.md\"]\nDepth = 3","category":"page"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"CurrentModule = MathematicalSystems\nDocTestSetup = quote\n using MathematicalSystems\nend","category":"page"},{"location":"lib/methods/#States-1","page":"Methods","title":"States","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"statedim\nstateset","category":"page"},{"location":"lib/methods/#MathematicalSystems.statedim","page":"Methods","title":"MathematicalSystems.statedim","text":"statedim(s::AbstractSystem)\n\nReturns the dimension of the state space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.stateset","page":"Methods","title":"MathematicalSystems.stateset","text":"stateset(s::AbstractSystem)\n\nReturns the set of allowed states of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Inputs-1","page":"Methods","title":"Inputs","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"inputdim\ninputset\nnextinput","category":"page"},{"location":"lib/methods/#MathematicalSystems.inputdim","page":"Methods","title":"MathematicalSystems.inputdim","text":"inputdim(s::AbstractSystem)\n\nReturns the dimension of the input space of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.inputset","page":"Methods","title":"MathematicalSystems.inputset","text":"inputset(s::AbstractSystem)\n\nReturns the set of allowed inputs of system s.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.nextinput","page":"Methods","title":"MathematicalSystems.nextinput","text":"nextinput(input::ConstantInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – a constant input\nn – (optional, default: 1) the number of desired elements\n\nOutput\n\nA repeated iterator that generates n equal samples of this input.\n\n\n\n\n\nnextinput(input::VaryingInput, n::Int=1)\n\nReturns the first n elements of this input.\n\nInput\n\ninput – varying input\nn – (optional, default: 1) number of desired elements\n\nOutput\n\nAn iterator of type Base.Iterators.Take that represents at most the first n elements of this input.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Output-1","page":"Methods","title":"Output","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"outputdim\noutputmap","category":"page"},{"location":"lib/methods/#MathematicalSystems.outputdim","page":"Methods","title":"MathematicalSystems.outputdim","text":"outputdim(m::AbstractMap)\n\nReturns the dimension of the output space of the map m.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#MathematicalSystems.outputmap","page":"Methods","title":"MathematicalSystems.outputmap","text":"outputmap(s::SystemWithOutput)\n\nReturns the output map of a system with output.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Traits-1","page":"Methods","title":"Traits","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"islinear(::AbstractSystem)\nislinear(::AbstractMap)\nisaffine(::AbstractSystem)\nispolynomial(::AbstractSystem)\nisaffine(::AbstractMap)\nisnoisy(::AbstractSystem)\niscontrolled(::AbstractSystem)\nisconstrained(::AbstractSystem)","category":"page"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by linear equations.\n\nNotes\n\nWe adopt the notion from [Section 2.7, 1]. For example, the system with inputs x = f(t x u) = A x + B u is linear, since the function f(t ) is linear in (x u) for each t mathbbR. On the other hand, x = f(t x u) = A x + B u + c is affine but not linear, since it is not linear in (x u).\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not linear, it returns false by default. For example, polynomial systems can be nonlinear; hence islinear returns false.\n\n[1] Sontag, Eduardo D. Mathematical control theory: deterministic finite dimensional systems. Vol. 6. Springer Science & Business Media, 2013.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.islinear-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.islinear","text":"islinear(m::AbstractMap)\n\nSpecifies if the map m is linear or not.\n\nNotes\n\nA map is linear if it preserves the operations of scalar multiplication and vector addition.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by affine equations.\n\nNotes\n\nAn affine system is the composition of a linear system and a translation. See islinear(::AbstractSystem) for the notion of linear system adopted in this library.\n\nThis function uses the information of the type, not the value. So, if a system type allows an instance that is not affine, it returns false by default. For example, polynomial systems can be nonlinear; hence isaffine is false.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.ispolynomial-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.ispolynomial","text":"ispolynomial(s::AbstractSystem)\n\nSpecifies if the dynamics of system s is specified by polynomial equations.\n\nThe criterion refers to the type information, not the value. Hence, e.g. a LinearContinuousSystem is not considered to be of polynomial type.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isaffine-Tuple{AbstractMap}","page":"Methods","title":"MathematicalSystems.isaffine","text":"isaffine(m::AbstractMap)\n\nSpecifies if the map m is affine or not.\n\nNotes\n\nAn affine map is the composition of a linear map and a translation. See also islinear(::AbstractMap).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isnoisy-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isnoisy","text":"isnoisy(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a noise term w.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.iscontrolled-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.iscontrolled","text":"iscontrolled(s::AbstractSystem)\n\nDetermines if the dynamics of system s contains a control input u.\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#MathematicalSystems.isconstrained-Tuple{AbstractSystem}","page":"Methods","title":"MathematicalSystems.isconstrained","text":"isconstrained(s::AbstractSystem)\n\nDetermines if the system s has constraints on the state, input and noise, respectively (those that are available).\n\n\n\n\n\n","category":"method"},{"location":"lib/methods/#Maps-1","page":"Methods","title":"Maps","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"apply","category":"page"},{"location":"lib/methods/#MathematicalSystems.apply","page":"Methods","title":"MathematicalSystems.apply","text":"apply(m::AbstractMap, args...)\n\nApply the rule specified by the map to the given arguments.\n\n\n\n\n\n","category":"function"},{"location":"lib/methods/#Successor-1","page":"Methods","title":"Successor","text":"","category":"section"},{"location":"lib/methods/#","page":"Methods","title":"Methods","text":"successor","category":"page"},{"location":"lib/methods/#MathematicalSystems.successor","page":"Methods","title":"MathematicalSystems.successor","text":"successor(system::DiscreteIdentitySystem, x::AbstractVector)\n\nReturn the successor state of a DiscreteIdentitySystem.\n\nInput\n\nsystem – DiscreteIdentitySystem\nx – state (it should be any vector type)\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::ConstrainedDiscreteIdentitySystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedDiscreteIdentitySystem.\n\nInput\n\nsystem – ConstrainedDiscreteIdentitySystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe same state x.\n\n\n\n\n\nsuccessor(system::LinearDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a LinearDiscreteSystem.\n\nInput\n\nsystem – LinearDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::AffineDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a AffineDiscreteSystem.\n\nInput\n\nsystem – AffineDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::LinearControlDiscreteSystem, x::AbstractVector, u::AbstractVector)\n\nReturn the successor state of a LinearControlDiscreteSystem.\n\nInput\n\nsystem – LinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineDiscreteSystem, x::AbstractVector;\n [check_constraints])\n\nReturn the successor state of a ConstrainedAffineDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedLinearControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::ConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::BlackBoxDiscreteSystem, x::AbstractVector)\n\nReturn the successor state of a BlackBoxDiscreteSystem.\n\nInput\n\nsystem – BlackBoxDiscreteSystem\nx – state (it should be any vector type)\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxDiscreteSystem, x::AbstractVector;\n [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxDiscreteSystem\nx – state (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x.\n\n\n\n\n\nsuccessor(system::ConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a ConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – ConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearDiscreteSystem, x::AbstractVector,\n w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearDiscreteSystem\nx – state (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedLinearControlDiscreteSystem,\n x::AbstractVector, u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedLinearControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedLinearControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedAffineControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedAffineControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedAffineControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state (resp. input) belongs to the state set (resp. input set)\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\nsuccessor(system::NoisyConstrainedBlackBoxControlDiscreteSystem, x::AbstractVector,\n u::AbstractVector, w::AbstractVector; [check_constraints]=true)\n\nReturn the successor state of a NoisyConstrainedBlackBoxControlDiscreteSystem.\n\nInput\n\nsystem – NoisyConstrainedBlackBoxControlDiscreteSystem\nx – state (it should be any vector type)\nu – input (it should be any vector type)\nw – noise (it should be any vector type)\ncheck_constraints – (optional, default: true) check if the state belongs to the state set\n\nOutput\n\nThe result of applying the system to x, with input u and noise w.\n\n\n\n\n\n","category":"function"}] +} diff --git a/v0.9.0/siteinfo.js b/v0.9.0/siteinfo.js new file mode 100644 index 00000000..785ab5cd --- /dev/null +++ b/v0.9.0/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.9.0"; diff --git a/versions.js b/versions.js new file mode 100644 index 00000000..2d5c684a --- /dev/null +++ b/versions.js @@ -0,0 +1,14 @@ +var DOC_VERSIONS = [ + "stable", + "v0.11", + "v0.9", + "v0.8", + "v0.7", + "v0.6", + "v0.3", + "v0.2", + "v0.1", + "dev", +]; +var DOCUMENTER_NEWEST = "v0.11.9"; +var DOCUMENTER_STABLE = "stable";